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

Spring Boot微服务JUnit控制器测试JWT依赖缺失问题求助

解决Spring Boot JWT控制器测试的NoClassDefFoundError问题

问题根源

你遇到的两类类加载失败错误,核心原因是依赖版本不兼容或缺少必要的测试依赖:

  • JwtGrantedAuthoritiesConverter属于spring-security-oauth2-resource-server模块,但如果依赖版本与Spring Boot主版本不匹配,会出现类缺失
  • Jwt$Builder属于spring-security-oauth2-jwt模块,通常由spring-security-oauth2-resource-server间接引入,但版本冲突时会无法加载
  • 测试中使用的jwt()方法来自spring-security-test模块,未添加该依赖也会导致相关扩展类无法找到

解决方案

1. 补充并统一核心依赖

在pom.xml中添加以下依赖,利用Spring Boot的依赖管理自动对齐版本,避免手动指定版本导致的冲突:

<!-- OAuth2资源服务核心依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>

<!-- Spring Security测试依赖,提供jwt() MockMvc扩展方法 -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-test</artifactId>
    <scope>test</scope>
</dependency>

2. 排查并解决版本冲突

如果已添加依赖仍报错,执行mvn dependency:tree查看依赖树,检查是否有不同版本的spring-security-oauth2-jwt或spring-security-oauth2-resource-server被间接引入。若存在冲突,在dependencyManagement中强制指定统一版本:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-oauth2-jwt</artifactId>
            <version>${spring-security.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-oauth2-resource-server</artifactId>
            <version>${spring-security.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

注意:${spring-security.version}必须与Spring Boot版本兼容,例如Spring Boot 2.7.x对应Spring Security 5.7.x,Spring Boot 3.x对应Spring Security 6.x。

3. 验证测试代码的正确导入

确保测试类中正确导入jwt()方法:

import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.jwt;

4. 清理缓存并重新构建

执行以下命令清理Maven缓存,重新加载依赖并构建项目:

mvn clean install -U

修正后的测试代码示例

@Test
public void test_WhenPlaceOrderWithWrongAccess_thenThrow403() throws Exception {
    OrderRequest orderRequest = getMockOrderRequest();
    MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/order/placeOrder")
                    .with(jwt().authorities(new SimpleGrantedAuthority("ADMIN")))
                    .contentType(MediaType.APPLICATION_JSON_VALUE)
                    .content(objectMapper.writeValueAsString(orderRequest)))
            .andExpect(MockMvcResultMatchers.status().isForbidden())
            .andReturn();
}

内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:01:57