如何在GlassFish上指定过滤器映射的顺序?

时间:2011-02-08 11:52:01

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

我读过处理过滤器的顺序可以通过web.xml中声明它们的顺序来确定

但是如何在没有web.xml的情况下执行此操作,例如使用@WebServlet注释? 我不想弄乱我的web.xml

2 个答案:

答案 0 :(得分:7)

看起来注释过滤器是不可能的。 Servlet 3.0 Specification说:

  

如上所述,使用时   用于定义侦听器,servlet和过滤器的注释,它们的顺序   调用未指定。

答案 1 :(得分:2)

正如@axtavt所说,你不能这样做。这就是为什么(我认为)他们就是这样设计的。

要指定顺序,注释需要一个额外的参数(以某种方式)指定链中的位置;例如订单'。这有问题:

  1. 如果servlet有多个过滤器,其顺序由注释参数指定,那么程序员/部署者必须检查所有过滤器类的注释,以确定实际的顺序是什么。

  2. 理论上,给定的过滤器类可用于多个servlet,甚至多个webapp。每个servlet或webapp可能希望过滤顺序不同。您只能在过滤器类上使用注释来实现此目的。

  3. 如果需要部署Web应用程序来更改过滤器顺序,他/她将需要修改源代码,重新编译并重建WAR文件。

  4. 我想设计师会查看这些问题,并确定指定过滤顺序的最佳位置在web.xml文件中。