我有以下 Spring 模块 A 和 B 的场景:
- 模块 A - 具有单点登录安全设置的 Spring 模块,使用@EnableOAuth2Sso、@EnableWebSecurity(debug = true) 和@Order(Ordered.HIGHEST_PRECEDENCE)
- 模块 B - Spring Boot 应用程序,具有 A 作为依赖项,不使用任何安全配置。
当我启动 B 时,我得到 2 个过滤器链,第一个来自模块 A,用于 SSO,第二个来自模块 B,是多余的:
- o.s.s.web.DefaultSecurityFilterChain : Creating filter chain: AnyRequestMatcher@1, [WebAsyncManagerIntegrationFilter@1407b93f, SecurityContextPersistenceFilter@38241615, OAuth2ClientContextFilter@31a8c3a3, HeaderWriterFilter@6bf2ecbb, LogoutFilter@6cc022ac, OAuth2ClientAuthenticationProcessingFilter@5aff8207, BasicAuthenticationFilter@42eaf47f, RequestCacheAwareFilter@42fc744, SecurityContextHolderAwareRequestFilter @6eeb15f9,AnonymousAuthenticationFilter@6a5a99d9,SessionManagementFilter@5955568,ExceptionTranslationFilter@74ec4df3,FilterSecurityInterceptor@6a577564]
- o.s.s.web.DefaultSecurityFilterChain : Creating filter chain: AnyRequestMatcher@1, [WebAsyncManagerIntegrationFilter@138110f8, SecurityContextPersistenceFilter@6278371a, HeaderWriterFilter@6b61a4b0, LogoutFilter@30623109, RequestCacheAwareFilter@c6a1be2, SecurityContextHolderAwareRequestFilter@6a486afb, AnonymousAuthenticationFilter@4fe8ac61, SessionManagementFilter@5c00de0d, ExceptionTranslationFilter @32db94fb]
问题:
- 如何禁用没有用的默认过滤器链?
- 模块 A 的调试标志 - @EnableWebSecurity(debug = true) 在运行模块 B 时被忽略,我无法调试安全设置
- 是否可以“扩展”A 的链并在 B 中添加更多过滤器?
最佳答案
这是旧的,但我有同样的问题并通过将 @EnableWebSecurity
注释添加到模块 A 并将此注释添加到模块 B:s @SpringBootApplication
来解决它:
@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })
如果您想知道原因,请在谷歌上搜索“SecurityAutoConfiguration”以获取有关 Spring 安全默认行为的更多信息。
关于Spring Boot - 来自依赖项的多个过滤器链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48927156/