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

Spring Rest Docs MockMvc测试接口遇302重定向至Google OAuth问题求助

排查GET /app/alarms/{alarmId}接口测试302重定向问题

核心排查方向

1. 安全配置的残留自动生效

就算你注释了业务代码里的OAuth逻辑,Spring Security的自动配置可能还在起作用:

  • 检查项目依赖,是否存在spring-boot-starter-security或spring-boot-starter-oauth2-client,这类依赖会自动启用全局安全拦截链。
  • 确认测试类是否通过@SpringBootTest加载了全局的SecurityConfig配置类,或者继承了带安全配置的父类。
  • 快速解决:在测试类上添加@AutoConfigureMockMvc(addFilters = false),直接禁用所有安全过滤器;或者改用@WebMvcTest(AlarmController.class)替代@SpringBootTest,仅加载控制器相关配置,避免触发全局安全逻辑。

2. MockMvc请求未处理认证校验

如果必须保留安全配置,检查测试代码是否正确模拟了认证状态:

  • 就算Mock了JwtService,Spring Security的认证过滤器还是会拦截未认证请求,触发重定向到OAuth授权页。
  • 解决方式:在MockMvc请求中添加认证信息,比如:
    mockMvc.perform(get("/app/alarms/{alarmId}", 1L)
            .with(user("test-user").roles("USER")))
            .andExpect(status().isOk());
    
    或者在测试方法上添加@WithMockUser注解,模拟已认证用户。

3. 控制器/方法上的安全注解残留

检查AlarmController类或目标接口方法上,是否存在@PreAuthorize、@Secured等安全注解。这些注解会独立触发Spring Security的认证校验,和业务代码里的OAuth逻辑无关。

  • 解决方式:临时注释这些注解,或者通过@WithMockUser满足注解要求的权限。

4. 测试配置文件的参数残留

如果测试类用了@SpringBootTest,可能加载了测试环境的配置文件:

  • 检查src/test/resources下的application-test.yml/application-test.properties,是否还保留了spring.security.oauth2.client.registration.google.*这类OAuth相关配置。
  • 解决方式:在测试配置中禁用OAuth自动配置:
    spring:
      autoconfigure:
        exclude: org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration
    

5. 依赖包的隐式引入

检查项目依赖树,确认是否有第三方依赖间接引入了OAuth2或Security相关包:

  • 用Maven命令mvn dependency:tree或Gradle命令gradle dependencies查看依赖树,排除不必要的安全/OAuth依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:12:10