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

测试时出现NoClassDefFoundError:缺失ClientRegistration类

问题解决:MockMvc测试OAuth2资源服务器JWT模式时出现NoClassDefFoundError

问题原因

你使用的SecurityMockMvcRequestPostProcessors.oauth2Login()属于OAuth2客户端模块的测试工具,但你的项目仅配置了OAuth2资源服务器(JWT模式),未引入OAuth2客户端相关依赖。应用运行时不需要客户端代码所以无异常,但测试时调用客户端相关处理器,就会缺失ClientRegistration类。

解决方案

有两种可行方案:

方案1:改用资源服务器JWT对应的测试处理器

既然你的应用是OAuth2资源服务器JWT模式,测试时应使用jwt()处理器模拟已认证的JWT请求,而非客户端登录的oauth2Login()。修改测试代码如下:

mockMvc
        .perform(
            MockMvcRequestBuilders.post("/code/test")
                .contentType(MediaType.APPLICATION_JSON)
                .content("")
                .with(SecurityMockMvcRequestPostProcessors.jwt())
        )
        .andExpect(status().isOk());

若需自定义JWT声明(如用户ID、权限),可扩展配置:

mockMvc
        .perform(
            MockMvcRequestBuilders.post("/code/test")
                .contentType(MediaType.APPLICATION_JSON)
                .content("")
                .with(SecurityMockMvcRequestPostProcessors.jwt()
                        .jwt(jwt -> jwt.claim("sub", "user123")
                                .claim("roles", "ROLE_USER")))
        )
        .andExpect(status().isOk());

方案2:添加OAuth2客户端测试依赖

若坚持使用oauth2Login(),需在测试依赖中加入Spring Security OAuth2客户端模块:

Maven(pom.xml)

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-oauth2-client</artifactId>
    <scope>test</scope>
</dependency>

Gradle(build.gradle)

testImplementation 'org.springframework.security:spring-security-oauth2-client'

更推荐方案1,它与你的资源服务器场景匹配,可避免引入不必要的依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:31:01