Spring Authorization Server+Gateway测试:contextLoads()失败,OAuth2客户端无法禁用
方案1:提供合法的绝对URI作为Issuer地址
错误的直接原因是配置的spring.security.oauth2.client.provider.spring.issuer-uri=some-url不是绝对URI——缺少http://或https://协议前缀,Spring OAuth2客户端在初始化InMemoryReactiveClientRegistrationRepository时会严格校验URI格式。
修改测试配置,使用格式合法的占位绝对URI,同时补充必要的客户端注册信息,确保自动配置能正常完成:
@SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = { "eureka.client.enabled=false", "spring.security.oauth2.client.provider.spring.issuer-uri=http://localhost:8080/auth", "spring.security.oauth2.client.registration.spring.client-id=test-client", "spring.security.oauth2.client.registration.spring.client-secret=test-secret", "spring.security.oauth2.client.registration.spring.scope=openid" }) class GatewayApplicationTests { @Test void contextLoads() {} }
方案2:完全禁用OAuth2客户端自动配置
如果测试场景不需要OAuth2客户端功能,可以直接排除相关自动配置类,彻底跳过这部分初始化逻辑,无需配置任何OAuth2相关属性:
@SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = {"eureka.client.enabled=false"}, exclude = { ReactiveOAuth2ClientAutoConfiguration.class, OAuth2ClientAutoConfiguration.class }) class GatewayApplicationTests { @Test void contextLoads() {} }
补充说明
- 方案1适合需要保留OAuth2客户端逻辑的测试场景,用占位URI模拟授权服务器地址;
- 方案2更简洁,适合仅需验证上下文加载的基础测试场景,避免不必要的自动配置开销。
内容的提问来源于stack exchange,提问作者vishal
相关产品推荐
相关产品推荐

