如何在 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 过滤器?

是否可以在 GlassFish 3.1 上为无状态 ejb Web 服务定义 servlet 过滤器

Glassfish Android