我使用Tomcat,但我想采用通用方式(servlet 3.0)
我在web.xml中有一些已配置的过滤器,其中一个是GuiceFilter。 GuiceFilter是一个有点欺负......一旦它被执行它将吞下请求并且永远不会调用进行过滤器。这样我就无法在Guice之后执行任何过滤器。 我可以在guice中定义所有过滤器而不是web.xml,但是这对于某些过滤器不起作用:" Tomcat WebSocket(JSR356)Filter" 这是一个过滤器Tomcat将在所有其他处理WebSockets后注册...它应该是第一个,而不是最后一个,但我只需要它在GuiceFilter之前或在其中执行。
我找到了一种方法来获取所有已注册的过滤器并将其添加到guice:
for (Entry<String, ? extends FilterRegistration> entry : context.getFilterRegistrations().entrySet()) {
FilterRegistration filterRegistration = entry.getValue();
System.out.println(entry.getKey() + " = " + filterRegistration);
Class<? extends Filter> clazz = (Class<? extends Filter>) Class.forName(filterRegistration.getClassName());
if (GuiceFilter.class.isAssignableFrom(clazz)) {
continue;
}
bind(clazz).in(Singleton.class);
filter(filterRegistration.getUrlPatternMappings()).through(clazz, filterRegistration.getInitParameters());
}
但是这样我会得到一些过滤器(Guice one之前的过滤器)执行两次(普通过滤器链和guice一个)
有没有办法让滤镜订购? (所以我只能添加guice之后的那些)
或者,另一种方式:有没有办法从正常链中删除过滤器,只留下guice one(将所有其他过滤器移动到guice本身)?