如何在 GlassFish 上指定过滤器映射的顺序?
Posted
技术标签:
【中文标题】如何在 GlassFish 上指定过滤器映射的顺序?【英文标题】:How to specify order of filter mappings on GlassFish? 【发布时间】:2011-06-23 09:22:54 【问题描述】:我读到过滤器的处理顺序可以由它们在web.xml中声明的顺序来确定
但是如何在没有 web.xml 的情况下执行此操作,例如使用 @WebServlet 注释? 我不想弄乱我的 web.xml
【问题讨论】:
这不是可以通过loadOnStartupOrder
属性控制的吗?
【参考方案1】:
正如@axtavt 所说,你不能这样做。这就是(我认为)他们这样设计的原因。
要指定顺序,注释需要一个额外的参数,(不知何故)指定链中的位置;例如订单'。这样做有问题:
如果一个 servlet 有多个过滤器,它们的顺序由注释参数指定,那么程序员/部署者必须检查所有过滤器类的注释以确定实际顺序是什么。
理论上,给定的过滤器类可以用于多个 servlet,甚至多个 web 应用程序。每个 servlet 或 webapp 可能希望过滤器顺序不同。您无法仅使用过滤器类上的注释来实现此目的。
如果部署 webapp 的人需要更改过滤顺序,他/她需要修改源代码,重新编译和重建 WAR 文件。
我想设计者看了这些问题并决定最好指定过滤顺序的地方是在web.xml文件中。
【讨论】:
所以基本上是因为理论上有人可能会在多个 webapps 上使用过滤器......而其他原因就像“但它很乏味”。我仍然喜欢你尝试找出原因。【参考方案2】:看起来对于带注释的过滤器是不可能的。 Servlet 3.0 Specification 说:
如上所述,当使用 用于定义侦听器、servlet 和过滤器的注释,它们的顺序 调用未指定。
【讨论】:
那么,回到石器时代。 你能相信过滤器链没有规定将链接按指定顺序排列吗?指定这个的人不了解现实世界吗?以上是关于如何在 GlassFish 上指定过滤器映射的顺序?的主要内容,如果未能解决你的问题,请参考以下文章
将应用程序部署到 GlassFish Server 时出现问题 - 映射问题?
如何使用 Spring 的 Java 配置指定过滤器执行顺序?
如何在 Jetty 中的 /* 上映射 servlet 过滤器?