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

7

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

但是如果不使用web.xml,例如使用@WebServlet注解,该如何实现呢?我不想让我的web.xml变得混乱。


这不是可以通过 loadOnStartupOrder 属性来控制吗? - musiKk
这个回答是否解决了你的问题?ServletContextListener执行顺序 - xuesheng
2个回答

8

看起来对于带注释的过滤器来说是不可能的。根据Servlet 3.0规范所述:

如上所述,当使用注释来定义监听器、servlet和过滤器时,它们被调用的顺序是未指定的。


3
回到石器时代了。 - rapadura
1
你能相信一个过滤器链没有为将链接按指定顺序放置提供条款吗?规定这一点的人难道不理解现实世界吗? - Romain Hippeau

2
正如@axtavt所指出的,您无法这样做。我认为他们之所以这样设计是有原因的。
为了指定顺序,注释需要一个额外的参数来(某种方式)指定链中的位置;例如,一个“顺序”。这样会存在问题:
1.如果一个servlet有多个过滤器,其顺序由注释参数指定,则程序员/部署者必须检查所有过滤器类的注释,以确定实际顺序。
2.理论上,给定的过滤器类可以在多个servlet甚至多个Web应用程序中使用。每个servlet或Web应用程序可能希望过滤器顺序不同。您不能仅使用过滤器类上的注释来实现这一点。
3.如果某人需要更改Web应用程序的过滤器顺序,则需要修改源代码,重新编译并重新构建WAR文件。
我想设计师们看到了这些问题,并决定在web.xml文件中指定过滤器顺序是最好的方法。

基本上,因为理论上有人可能在多个Web应用程序上使用过滤器...而其他原因则是“但这很繁琐”。尽管如此,我仍然喜欢你试图推理出为什么。 - rapadura

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接