Spring security 引入springSecurityFilterChain后,FilterRegistrationBeans未执行
如果我使用Java配置设置SS HttpSecurity。Spring Boot创建一个springSecurityFilterChain,它在安装日志期间被记录。但是,现在使用标准URL模式的FilterRegistrationBeans不会被调用 第2部分问题:Spring security 引入springSecurityFilterChain后,FilterRegistrationBeans未执行,spring-security,spring-boot,Spring Security,Spring Boot,如果我使用Java配置设置SS HttpSecurity。Spring Boot创建一个springSecurityFilterChain,它在安装日志期间被记录。但是,现在使用标准URL模式的FilterRegistrationBeans不会被调用 第2部分问题: 这是标准行为吗?哪里一旦安装了Spring Security,我所有的Servlet FilterBean注册就会突然中断??我原以为SpringBoot会自动找出如何将它们“添加”到相应的springSecurityFilterC
正如您在下面看到的,默认情况下,
WebSecurityConfigurerAdapter
会向安全过滤器链添加很多内容
虽然我仍然不知道是哪一个设置导致了FilterBeanRegistrations
中断,但将disableDefaults
设置为true
并自行配置安全过滤器链就成功了
if(!disableDefaults) {
http
.csrf().and()
.addFilter(new WebAsyncManagerIntegrationFilter())
.exceptionHandling().and()
.headers().and()
.sessionManagement().and()
.securityContext().and()
.requestCache().and()
.anonymous().and()
.servletApi().and()
.apply(new DefaultLoginPageConfigurer<HttpSecurity>()).and()
.logout();
}
if(!disableDefaults){
http
.csrf()和()
.addFilter(新的WebAsyncManagerIntegrationFilter())
.exceptionHandling()和()
.headers()和()
.sessionManagement()和()
.securityContext()和()
.requestCache()和()
.anonymous()和()
.servletApi()和()
.apply(新的DefaultLoginPageConfigurer())和()
.logout();
}
FilterRegistratonBeans向servlet容器注册过滤器bean。他们与Spring Security无关。你是怎么确定它们坏了的?为什么您希望它们成为Spring Security的筛选器链的一部分?当我使用“/*”时,我的自定义筛选器将在Spring Security FC之前调用。我需要在SS FC之后但在调用我的服务之前调用它们。在使用特定的url模式时,我根本没有看到它们执行(在调试器或日志文件中),似乎只有“/*”能够捕获它们。您可以在过滤器上使用@Order来确保它们在Spring Security的过滤器之后运行。我认为Spring安全过滤器的默认顺序是零。为过滤器指定较低的优先级(较高的值)。