springsecurity:filterchainproxy:virtualfilterchain-->什么填充了原始链?

tnkciper  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(252)

我正在编写一个新的spring安全配置。我需要导入一些具有自己配置/筛选器的其他公司库。每个带有@component/@bean注解的过滤器都出现在filterchainproxy的“originalchain”属性中,并在请求时运行。我已经搜索了文档,无法找出originalchain属性是什么,为什么它在那里,是什么决定了要去那里的过滤器等等。我想停止运行未使用的过滤器。
一篇文章将其描述为“originalchain代表本机过滤器链,即web过滤器”,我一直无法理解这意味着什么。
什么是原始链?

mtb9vblg

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上的这个问题。

相关问题