Spring Boot 3.0.7中springSecurityFilterChain类型不匹配问题求助
解决Spring Security中
springSecurityFilterChain类型不匹配异常 问题背景
使用Spring Boot 3.0.7、Spring Security 6.0.9,在Java 17或19环境下开发OAuth客户端应用,应用编译及启动正常,但访问localhost:8080时立即抛出异常:
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'springSecurityFilterChain' is expected to be of type 'jakarta.servlet.Filter' but was actually of type 'org.springframework.security.web.DefaultSecurityFilterChain'
疑问
该Bean为何需要是jakarta.servlet.Filter类型?
原因解析
- Servlet容器的硬性要求:Web应用的请求过滤流程由Servlet容器(如Tomcat)管控,容器仅识别实现
jakarta.servlet.Filter接口的类。Spring Security的核心逻辑是通过过滤器链拦截、处理请求,因此必须将其适配为Servlet容器能识别的Filter类型,才能融入请求处理流程。 - 代码中的错误触发点:你的Security配置类中错误导入了
org.springframework.security.config.web.server.ServerHttpSecurity——这是Spring WebFlux(响应式Web框架)的配置类,而你的项目是基于Servlet的(依赖spring-boot-starter-web)。这种跨环境的API混入,导致Spring容器无法正确将SecurityFilterChain(具体实现为DefaultSecurityFilterChain)包装成Servlet容器所需的Filter类型,最终抛出类型不匹配异常。
修复方案
删除多余的WebFlux相关导入,确保配置类仅依赖Servlet环境的Spring Security API:
修正后的OAuth2LoginSecurityConfig代码:
package com.example.oauth2; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; @Configuration @EnableWebSecurity public class OAuth2LoginSecurityConfig { @Bean SecurityFilterChain springSecurityFilterChain(HttpSecurity http) throws Exception { http.oauth2Login(); return http.build(); } }
补充说明:SecurityFilterChain是Spring Security内部定义的过滤器链模型,正常情况下,框架会自动将其包装为FilterChainProxy(实现了jakarta.servlet.Filter接口),以此适配Servlet容器的要求。
内容的提问来源于stack exchange,提问作者user63868
相关产品推荐
相关产品推荐

