具有相同 url 映射的多个过滤器

Posted

技术标签:

【中文标题】具有相同 url 映射的多个过滤器【英文标题】:Multiple filters with same url mapping 【发布时间】:2013-11-28 17:56:18 【问题描述】:

是否可以使用两个具有相同 url 映射的过滤器?

<filter>
 <filter-name>TeeFilter</filter-name>
 <filter-class>filter1r</filter-class>
</filter>
<filter-mapping>
 <filter-name>TeeFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<display-name>CredentialsFilter</display-name>
<filter-name>CredentialsFilter</filter-name>
<filter-class>filter2</filter-class>
</filter>
<filter-mapping>
 <filter-name>CredentialsFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>

【问题讨论】:

【参考方案1】:

是的。你可以。

您在 web.xml 中下的订单将执行。

这里,

首先控制转到TeeFilter,然后转到CredentialsFilter

如果你想先执行CredentialsFilter,在web.xml中改变顺序

【讨论】:

我只使用 CredentialsFilter,一旦我添加了 TeeFilter,它只是一个用于记录 http 请求和响应的 logback 记录器,一些服务停止工作,而其他服务仍在工作。你知道为什么会发生这种情况吗? @mosaad 是的,这真的很奇怪。它不应该发生。你观察执行顺序吗?还有什么例外? 执行顺序没有区别,创建的日志文件显示收到 204 响应 老问题漏掉了一个重点:你需要一个chain.doFilter(request, response);在你的公共 void doFilter(...)

以上是关于具有相同 url 映射的多个过滤器的主要内容,如果未能解决你的问题,请参考以下文章

在 ServletRequests 上使用 java Filter 时如何检查 url 是不是具有有效映射

谷歌地图多个标记映射到一个没有坐标的区域

过滤具有多个值的字段

03-模板(过滤器,代码复用,表单,CSRF)

具有多个视频帧的 DirectShow 变换过滤器 - 与音频同步

特定 url 的过滤器映射