Spring Boot启动报错:无String转OAuth2ClientProperties$Registration转换器
问题排查与解决方案
核心错误原因
启动失败的直接原因是application.yaml配置格式错误,导致Spring无法将配置绑定到OAuth2ClientProperties$Registration对象;其次存在Web安全配置栈冲突问题。
1. 配置文件格式与拼写错误
internal-client: okta写法错误:OAuth2客户端注册的属性需要嵌套在internal-client节点下,而非直接赋值okta,okta应作为provider属性的值。- 授权类型拼写错误:
client_credentails→client_credentials(少了一个i)。
2. Web安全配置栈冲突
当前使用@EnableWebFluxSecurity(响应式WebFlux配置),但同时引入了RestTemplate(Servlet栈组件),两者无法在同一Spring Boot应用中混用,需切换为Servlet栈的安全配置。
修改后的代码
1. 修正后的application.yaml
security: oauth2: resourceserver: jwt: issuer-uri: <okta issuer uri> client: registration: internal-client: provider: okta client-id: <My- client id> client-secret: <My client secret> authorization-grant-type: client_credentials scope: internal provider: okta: issuer-uri: <okta issuer uri> okta: oauth2: issuer: <okta issuer uri> audience: api://default
2. 修正后的WebSecurityConfig(Servlet栈)
package DemoService.ConfigClasses; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity @EnableMethodSecurity(prePostEnabled = true) public class WebSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests() .anyRequest() .authenticated() .and() .oauth2ResourceServer() .jwt(); return http.build(); } }
修改说明
- 配置文件:将
internal-client的所有属性嵌套到其节点下,明确指定provider: okta,让Spring能够正确解析并绑定到注册对象;修正授权类型拼写,避免后续令牌获取失败。 - 安全配置:替换为Servlet栈的
@EnableWebSecurity和HttpSecurity配置,与RestTemplate兼容;使用Spring Boot 3.x推荐的@EnableMethodSecurity替代过时的@EnableGlobalMethodSecurity。
内容的提问来源于stack exchange,提问作者Akash Das
相关产品推荐
相关产品推荐

