Spring Security多Servlet项目启动报错:找不到springSecurityFilterChain Bean
解决Spring Security 'springSecurityFilterChain' 缺失问题
以下是针对该报错的具体排查和解决步骤:
1. 确保Security配置类被Spring容器识别
- 所有
SecurityConfig类必须添加@Configuration和@EnableWebSecurity注解,这两个注解是Spring生成springSecurityFilterChainBean的核心前提。 - 检查ContextLoaderListener加载的Spring上下文是否包含Security配置所在的包:
- 若使用XML配置,需在
contextConfigLocation中指定Security配置文件路径; - 若使用注解配置,需在根配置类的
@ComponentScan中包含Security类所在的包路径。
- 若使用XML配置,需在
2. 校验多SecurityConfig的@Order配置合理性
- 多个Security配置类的
@Order注解值需按优先级从小到大设置(如1、2、3),确保Spring能正确排序并合并配置逻辑。 - 若使用Spring Security 5.7+版本,推荐抛弃继承
WebSecurityConfigurerAdapter的方式,改用@Bean直接定义SecurityFilterChain,避免继承导致的配置冲突:@Configuration @EnableWebSecurity @Order(1) public class RestSecurityConfig { @Bean public SecurityFilterChain restSecurityFilterChain(HttpSecurity http) throws Exception { http .securityMatcher("/api/**") .authorizeHttpRequests(auth -> auth.anyRequest().authenticated()) .httpBasic(); return http.build(); } }
3. 验证web.xml中的配置正确性
- 确保
springSecurityFilterChain过滤器配置完整且映射路径覆盖所有需要认证的请求:<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> - 检查
ContextLoaderListener的contextConfigLocation参数,确保其包含Security配置的上下文路径,避免Spring上下文未加载Security配置。
4. 确认Maven依赖兼容性
- 保证Spring Security与Spring核心版本匹配(如Spring 5.x对应Spring Security 5.x,Spring 6.x对应Spring Security 6.x)。
- 确保
pom.xml中包含必要的Spring Security依赖:<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>${spring-security.version}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>${spring-security.version}</version> </dependency>
5. 排查Spring上下文加载日志
- 开启Spring的DEBUG级别日志,查看启动时的Bean加载日志,确认
springSecurityFilterChain是否被创建,以及Security配置类是否被Spring上下文扫描到。若未加载到Security配置类,需调整包扫描路径。
内容的提问来源于stack exchange,提问作者P. Gauthier
相关产品推荐
相关产品推荐

