Spring Security 6迁移:依赖中的安全配置被主项目忽略
问题排查:依赖中的Spring Security配置未生效,AuthFilter未执行
以下是几种可能导致该问题的原因及对应的排查/解决方法:
1. 主项目未扫描到依赖中的配置类
Spring默认仅扫描主启动类所在包及其子包的组件,若依赖中的WebSecurityConfig不在主项目的扫描范围内,该配置类不会被Spring容器加载。
排查与解决:
- 检查主项目的
@SpringBootApplication(或@ComponentScan)注解是否包含依赖包的路径。例如,若依赖中的配置类在com.example.dep.security包下,主项目需添加扫描路径:@SpringBootApplication(scanBasePackages = {"com.example.main", "com.example.dep"}) public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } } - 若依赖是Spring Boot Starter,可在依赖的
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中添加com.example.dep.security.WebSecurityConfig,让Spring Boot自动加载该配置类。
2. 主项目存在优先级更高的SecurityFilterChain Bean
当Spring容器中存在多个SecurityFilterChain Bean时,会根据@Order注解指定的优先级排序(数值越小优先级越高)。若主项目中有自己的SecurityFilterChain Bean且未指定@Order,默认优先级会高于依赖中的配置,导致依赖的配置被覆盖。
排查与解决:
- 检查主项目中是否定义了自己的
SecurityFilterChainBean。若存在,可调整依赖中WebSecurityConfig的优先级:@Configuration @EnableWebSecurity @RequiredArgsConstructor @Slf4j @Order(1) // 设置比主项目FilterChain更低的数值以提高优先级 public class WebSecurityConfig { // ... 现有代码 } - 若主项目的FilterChain不需要保留,可直接删除,确保依赖中的FilterChain生效。
3. AuthFilter未正确实现核心逻辑
你的AuthFilter仅继承了OncePerRequestFilter,但未重写doFilterInternal方法,即使Filter被加载也不会执行任何逻辑。另外,需确认Filter是否被Spring容器正确注册。
排查与解决:
- 补全
AuthFilter的doFilterInternal实现,添加日志验证是否执行:@Component @RequiredArgsConstructor @Slf4j public class AuthFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { log.info("AuthFilter 正在处理请求:{}", request.getRequestURI()); // 你的认证逻辑... filterChain.doFilter(request, response); } } - 检查
AuthFilter上的@Component注解是否生效,确保它被Spring容器扫描并注入到WebSecurityConfig中。
4. Spring Security自动配置干扰
主项目可能存在禁用Spring Security自动配置的情况,或者自动配置类的优先级高于依赖中的配置。
排查与解决:
- 检查主项目的
@SpringBootApplication注解是否包含exclude = SecurityAutoConfiguration.class,若有,需移除该配置(除非确实需要完全禁用自动配置)。 - 确保依赖中的
WebSecurityConfig上的@EnableWebSecurity注解正确启用了Spring Security的配置,该注解会自动禁用Spring Boot的默认Security自动配置。
内容的提问来源于stack exchange,提问作者infD
相关产品推荐
相关产品推荐

