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

Spring Security 6 JWT集成测试报错:缺失HandlerMappingIntrospector

解决方案

问题根源

你的测试仅加载了自定义安全配置类,未初始化完整的Spring MVC上下文,导致缺失HandlerMappingIntrospector;同时由于未触发Okta Starter的自动配置逻辑,jwtDecoder Bean也无法被创建。


方案1:使用@WebMvcTest切片测试(推荐)

该注解专为控制器层测试设计,会自动配置Spring MVC核心组件(包括HandlerMappingIntrospector),且仅加载指定控制器类,不会引入服务层Bean,完全匹配你的需求。

修改测试类如下:

@WebMvcTest(controllers = [目标控制器类::class]) // 指定要测试的控制器,避免冗余Bean加载
@Import(CustomSecurityConfig::class) // 导入自定义安全配置,确保权限规则生效
class SecuritySetupTest {

    @Autowired
    private lateinit var mvc: MockMvc

    @Test
    fun contextLoads() {
        assertTrue { true }
    }

    // 示例:验证swagger端点允许匿名访问
    @Test
    fun swaggerEndpointPermitted() {
        mvc.perform(get("/v3/api-docs"))
            .andExpect(status().isOk)
    }

    // 示例:验证受保护端点需要认证
    @Test
    fun protectedEndpointRequiresAuth() {
        mvc.perform(get("/your-protected-path"))
            .andExpect(status().isUnauthorized)
    }
}

关键说明:

  • @WebMvcTest自动完成Spring MVC基础环境搭建,无需手动配置HandlerMappingIntrospector。
  • Okta Starter的自动配置逻辑会被测试框架触发,自动创建jwtDecoder Bean,无需手动Mock或定义。
  • 若需测试认证后的请求,可使用Spring Security提供的jwt()请求处理器模拟合法令牌:
    @Test
    fun protectedEndpointAccessibleWithValidJwt() {
        mvc.perform(get("/your-protected-path")
                .with(jwt().jwt { it.claim("scope", "required-scope") }))
            .andExpect(status().isOk)
    }
    

方案2:保留原有测试结构的兼容配置(不推荐)

如果必须使用@ContextConfiguration,需手动导入Spring MVC基础配置和Okta的自动配置类,补全缺失的Bean:

@ExtendWith(SpringExtension::class)
@ContextConfiguration(classes = [
    CustomSecurityConfig::class,
    WebMvcConfigurer::class, // 初始化Spring MVC核心组件
    OktaOAuth2ResourceServerAutoConfiguration::class // 触发Okta的JWT配置
])
@WebAppConfiguration
class SecuritySetupTest {

    @Autowired
    private lateinit var context: WebApplicationContext

    private lateinit var mvc: MockMvc

    @BeforeEach
    fun setup() {
        mvc = MockMvcBuilders
            .webAppContextSetup(this.context)
            .apply(springSecurity())
            .build()
    }

    @Test
    fun contextLoads() {
        assertTrue { true }
    }
}

关键说明:

  • WebMvcConfigurer::class会引入Spring MVC必要的Bean,包括HandlerMappingIntrospector。
  • OktaOAuth2ResourceServerAutoConfiguration::class让Okta自动配置jwtDecoder,避免手动Mock。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:20:59