我正在写一个新的spring安全配置。我需要导入一些具有自己的配置/过滤器的其他公司库。每个带有@Component/@Bean注释的过滤器都出现在FilterChainProxy的"originalChain“属性中,并在请求时运行。我搜索了文档,找不出originalChain属性是什么,为什么它在那里,是什么决定了要去那里的过滤器,等等。我想停止运行未使用的过滤器。
一篇文章把它描述为“originalChain代表原生过滤器链,也就是网页过滤器”,我还不能理解这是什么意思。
什么是originalChain?
发布于 2021-07-01 03:26:08
每个Servlet应用程序都可以在到达实际的Filter之前执行多个Servlet实现。总体情况是这样的:

Spring提供了一个名为DelegatingFilterProxy的过滤器实现,它允许在Servlet容器的生命周期和Spring的ApplicationContext之间架起桥梁。Servlet容器允许使用自己的标准注册过滤器,但它不知道Spring定义的Beans。DelegatingFilterProxy可以通过标准的Servlet容器机制进行注册,但将所有工作委托给实现过滤器的Spring Bean。

考虑到这一点,我们可以说DelegatingFilterProxy是Spring MVC在注册过滤器时使用自己的标准的一种方法。
当您公开实现Filter的Spring Bean时,它将在DelegatingFilterProxy中注册。
FilterChainProxy是Spring Security提供的一种特殊的Filter,它允许通过SecurityFilterChain委托给许多Filter实例。因为FilterChainProxy是一个Bean,所以它通常被包装在DelegatingFilterProxy中。

您可以看到,上面这张假设的图片将FilterChainProxy作为过滤器链(虚线框)中的第二个过滤器。一旦FilterChainProxy完成了对其SecurityFilterChain过滤器的处理,它将调用originalChain (虚线框)来继续处理剩余的过滤器,在上面的场景中是Filter2。
在Spring Security reference中也有一个很好的解释,我在这里引用了本文中的大部分资源。
如果你想阻止Spring注册一个Filter,你可以参考这个question on StackOverflow。
https://stackoverflow.com/questions/68198276
复制相似问题