You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除Spring Boot父依赖后测试缺失CsrfTokenRequestHandler类问题

安全端点单元测试类缺失问题排查与解决方案

问题描述

我正在编写单元测试验证带有@PreAuthorized注解的安全端点,参考Spring官方文档实现,但执行到.with(jwt().authorities(new SimpleGrantedAuthority("SCOPE_data.read"), new SimpleGrantedAuthority("SCOPE_openid")))代码时,抛出java.lang.NoClassDefFoundError: org/springframework/security/web/csrf/CsrfTokenRequestHandler异常,同时还缺失XorCsrfTokenRequestAttributeHandler等类。项目已引入spring-security-test 5.8.5依赖,但移除了spring-boot-starter-parent 2.7.15父依赖,使用自定义父依赖。保留Spring Boot父依赖时测试可正常运行,想了解为何必须依赖它,能否不依赖该父依赖实现此测试策略?

原因分析

Spring Boot父依赖(spring-boot-starter-parent)是一个标准化的依赖管理BOM,它做了两件关键事情:

  • 自动引入了spring-security-web的兼容版本——你缺失的CsrfTokenRequestHandler、XorCsrfTokenRequestAttributeHandler类都属于spring-security-web模块,而非spring-security-test
  • 强制保证了所有Spring Security相关组件(核心、web、测试模块)的版本完全一致,避免版本不匹配导致的类找不到问题

不依赖Spring Boot父依赖的解决方案

完全可以脱离Spring Boot父依赖实现测试,只需手动补全依赖并维护版本一致性:

  • 显式引入spring-security-web依赖:添加与spring-security-test 5.8.5同版本的spring-security-web,如果仅测试环境需要,可指定test范围:
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>5.8.5</version>
        <scope>test</scope>
    </dependency>
    
  • 统一维护Spring组件版本:在自定义父依赖的<dependencyManagement>中统一声明所有Spring Security相关组件的版本,确保spring-security-core、spring-security-web、spring-security-test版本完全相同
  • 按需补充其他依赖:如果后续出现其他类缺失,可参考Spring Boot 2.7.15的依赖清单,手动引入对应的兼容依赖(如Spring Web模块)

内容的提问来源于stack exchange,提问作者fforfabio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:01:10