我正在编写一个新的spring安全配置。我需要导入一些具有自己配置/筛选器的其他公司库。每个带有@component/@bean注解的过滤器都出现在filterchainproxy的“originalchain”属性中,并在请求时运行。我已经搜索了文档,无法找出originalchain属性是什么,为什么它在那里,是什么决定了要去那里的过滤器等等。我想停止运行未使用的过滤器。
一篇文章将其描述为“originalchain代表本机过滤器链,即web过滤器”,我一直无法理解这意味着什么。
什么是原始链?
1条答案
按热度按时间mtb9vblg1#
每个servlet应用程序都可以有多个
Filter
在达到实际目标之前执行的实现Servlet
. 大局是这样的:spring提供了一个名为delegatingfilterproxy的过滤器实现,它允许在servlet容器的生命周期和spring的
ApplicationContext
. servlet容器允许使用自己的标准注册过滤器,但它不知道spring定义的bean。DelegatingFilterProxy
可以通过标准servlet容器机制注册,但将所有工作委托给实现过滤器的Springbean。考虑到这幅图,我们可以说
DelegatingFilterProxy
是SpringMVC在注册过滤器时使用自己的标准的一种方法。当您公开实现
Filter
,它将在DelegatingFilterProxy
.FilterChainProxy
是一种特殊的Filter
由spring security提供,允许通过SecurityFilterChain
. 自从FilterChainProxy
是一个豆子,它通常被 Package 在DelegatingFilterProxy
.你可以看到上面这个假设的图片有
FilterChainProxy
作为过滤器链(虚线框)中的第二个过滤器。一旦FilterChainProxy
是否已完成其处理SecurityFilterChain
过滤器,它将调用originalChain
(虚线框)要恢复对其余过滤器的处理,请在上述场景中选择filter2。在SpringSecurity参考资料中也有一个很好的解释,我在这里引用了本文中的大部分资源。
如果你想防止
Filter
要通过spring注册,您可以参考stackoverflow上的这个问题。