有什么方法可以指定在web.xml中声明它之外的过滤器的顺序吗?
从Servlet 3.0开始,我们现在可以通过注释(@WebFilter)或动态(通过ServletContext对象)声明Web过滤器。有什么方法可以指定在web.xml中声明它之外的过滤器的顺序吗?
我知道使用@WebFilter不允许指定过滤顺序。同样,我还没有找到任何方式来指定通过ServletContext.addFilter()方法动态声明时的顺序。我查看了FilterRegistration对象,但也没有任何内容。
这是否意味着在过滤器链中指定过滤器顺序的唯一方法是通过web.xml?有没有其他机制可用?这不是Servlet 3.0+的重大监督吗?
在链中执行通过注释或通过ServletContext对象声明的过滤器?在web.xml中声明的那些结尾处?未定义?
这是否意味着在过滤器链中指定过滤器顺序的唯一方法是通过web.xml?
是的。检查Servlet 3.0 spec的以下部分:
4.4.2编程方式添加和配置过滤器过滤器的
6.2.4配置在Web应用程序
8.1.2 @WebFilter
提到过滤器排序的唯一地方是在6.2.4节中,它指定了如何使用web.xml。在addFilter()和@WebFilter的章节中未提及订购。
有没有其他机制可用?
不在Servlet 3.0规范中,所以没有。
这不是Servlet 3.0+的重大疏漏吗?
我怀疑这种遗漏是“疏忽”。来自BalusC的评论是relevant SO post为什么没有其他机制提供了一个合理的理由:如果您的webapp带有包含过滤器的第三方库,该怎么办?事先很难说出它的顺序。
在链中执行通过注释或通过ServletContext对象声明的过滤器?在web.xml中声明的那些结尾处? 未定义?
由于规范没有解决这些情况,因此排序必然是未定义的。