有没有办法在web.xml中声明过滤器的顺序?

时间:2017-10-04 20:51:36

标签: java web.xml servlet-filters servlet-3.0

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

我知道使用@WebFilter不允许指定过滤器顺序。类似地,我没有找到任何方法来通过ServletContext.addFilter()方法动态声明它时指定顺序。我查看了FilterRegistration对象,但也没有任何内容。

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

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

1 个答案:

答案 0 :(得分:2)

  

这是否意味着在过滤器链中指定过滤器顺序的唯一方法是通过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中声明的那些结尾?   未定义?

由于规范没有解决这些问题,因此排序必须是未定义的。