为啥转发的请求会再次通过过滤器链?

Posted

技术标签:

【中文标题】为啥转发的请求会再次通过过滤器链?【英文标题】:Why does a forwarded request pass through filter chain again?为什么转发的请求会再次通过过滤器链? 【发布时间】:2011-10-04 09:25:26 【问题描述】:

我为 Grails 应用程序实现了不常见的架构,因为我制作了仅进一步转发请求的前端控制器(基于某些标准)。我还将语言环境解析器实现为 http servlet 请求过滤器。事实证明,转发的请求再次通过过滤器链。所以流程看起来像这样:

    请求到达 grails 应用程序 请求通过我的过滤器 前端控制器获取请求并进一步转发 转发的请求再次通过我的过滤器 后端控制器获取请求

在写这篇文章的同时,我已经想出了如何省略这个问题(我的具体实现)。但我仍然很好奇为什么会这样?前锋应该在幕后工作。 Java EE 规范没有说明这种行为 (forward javadoc)。

【问题讨论】:

【参考方案1】:

<filter-mapping> 元素中有转发<dispatcher> 选项。它包括FORWARD。您必须列出您希望过滤器应用到的选项(请求、错误、包含),然后向前省略。

【讨论】:

谢谢。我什至不知道<dispatcher> 选项。现在一切都清楚了。有一个很好的编码;)

以上是关于为啥转发的请求会再次通过过滤器链?的主要内容,如果未能解决你的问题,请参考以下文章

Spring cloud学习--Zuul02

转发来自过滤器的请求

14 行为型责任链模式理解与使用~

spring重定向设置请求头header

过滤器链及责任链设计模式

Spring Security教程:用户认证流程源码详解