除了在 web.xml 中声明之外,有没有办法指定过滤器的顺序?

Eri*_* B. 1 java web.xml servlet-3.0 servlet-filters

从 Servlet 3.0 开始,我们现在可以通过注释(@WebFilter)或动态(通过ServletContext对象)声明 Web 过滤器。

我知道使用 @WebFilter 不允许指定过滤器顺序。同样,当通过ServletContext.addFilter()方法动态声明它时,我还没有找到任何指定顺序的方法。我已经查看了 FilterRegistration 对象,但那里也没有任何内容。

这是否意味着在过滤器链中指定过滤器顺序的唯一方法是通过 web.xml?没有其他可用的机制吗?这不是对 Servlet 3.0+ 的重大疏忽吗?

通过注释或 ServletContext 对象声明的过滤器在链中的哪个位置?那些在web.xml中声明的结尾?不明确的?

sko*_*isa 5

这是否意味着在过滤器链中指定过滤器顺序的唯一方法是通过 web.xml?

是的。检查Servlet 3.0 规范的以下部分:

  • 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 的评论是这个相关的 SO 帖子提供了一个合理的原因,为什么没有替代机制:如果您的 web 应用程序附带包含过滤器的 3rd 方库怎么办?很难事先说出它的顺序。

通过注释或 ServletContext 对象声明的过滤器在链中的哪个位置?那些在web.xml中声明的结尾?不明确的?

排序必然是未定义的,因为规范没有解决这些场景。