为嵌入式Jetty中的多个路径添加servlet过滤器

时间:2015-07-13 10:17:44

标签: java servlets jetty servlet-filters embedded-jetty

我正在创建一个servlet过滤器,该过滤器只应处理我的应用程序中特定路径的请求。

我可以轻松地为我的ServletContextHandler添加一个过滤器,例如:

FilterHolder holder = new FilterHolder(new MyFilter());
holder.setInitParameter("param", "a");
contextHandler.addFilter(holder, "/x", EnumSet.allOf(DispatcherType.class));

但是如何为此过滤器添加更多路径? 我希望它也能处理/y的请求。

我似乎无法找到任何简单而正确的方法来做到这一点。 使用web.xml我只需在过滤器映射下定义多个<url-pattern>标签。

使用Jetty版本9.3.0.v20150612。

1 个答案:

答案 0 :(得分:1)

只需多次添加过滤器(通过其支架)。

FilterHolder holder = new FilterHolder(new MyFilter());
holder.setName("my-filter");
holder.setInitParameter("param", "a");
contextHandler.addFilter(holder, "/x", EnumSet.allOf(DispatcherType.class));
contextHandler.addFilter(holder, "*.y", EnumSet.allOf(DispatcherType.class));
contextHandler.addFilter(holder, "/z/*", EnumSet.allOf(DispatcherType.class));

替代技术(重用使用addFilter生成的持有者)

Enum<DispatcherType> dispatchers = EnumSet.allOf(DispatcherType.class);
FilterHolder holder = contextHandler.addFilter(MyFilter.class, "/x", dispatchers);
holder.setInitParameter("param", "a");
contextHandler.addFilter(holder, "*.y", dispatchers);
contextHandler.addFilter(holder, "/z/*", dispatchers);