我正在创建一个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。
答案 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);