升级spring-security-oauth2-client后启动报错:NoSuchFieldError: CLIENT_SECRET_BASIC
问题分析与解决办法
错误原因
java.lang.NoSuchFieldError: CLIENT_SECRET_BASIC 源于版本兼容性不匹配:
- 升级后的
spring-security-oauth2-client 5.6.9/5.7.5属于Spring Security 5.6+版本,该版本中CLIENT_SECRET_BASIC字段的定义位置发生变更(移至ClientAuthenticationMethod枚举,不再属于旧版本的OAuth2AuthorizationRequest类)。 - 你当前使用的
spring-cloud-services-starter-config-client 3.1.5.RELEASE基于Spring Boot 2.4.x构建,仅兼容Spring Security 5.3.x~5.4.x版本,它的ConfigClientOAuth2BoostrapConfiguration类仍依赖旧版本的字段定义,导致初始化时找不到该字段。
具体解决办法
方案1:升级Spring Cloud Config Client到兼容版本
将spring-cloud-services-starter-config-client升级到与Spring Security 5.6+/5.7+匹配的版本:
- 若选用Spring Security 5.6.x(如5.6.9),对应升级到
spring-cloud-services-starter-config-client 3.3.x.RELEASE(基于Spring Boot 2.6.x,兼容Spring Security 5.6.x)。 - 若选用Spring Security 5.7.x(如5.7.5),对应升级到
spring-cloud-services-starter-config-client 3.4.x.RELEASE(基于Spring Boot 2.7.x,兼容Spring Security 5.7.x)。
调整后的依赖示例:
<dependency> <groupId>io.pivotal.spring.cloud</groupId> <artifactId>spring-cloud-services-starter-config-client</artifactId> <version>3.3.4.RELEASE</version> <type>pom</type> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>5.6.9</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-client</artifactId> <version>5.6.9</version> </dependency>
方案2:降级Spring Security到兼容的安全补丁版本
如果无法升级Spring Cloud Config Client,可选择Spring Security 5.3.x的最新安全补丁版本(该版本已修复高危漏洞,同时与3.1.5.RELEASE的Config Client兼容):
- 统一所有Spring Security相关依赖版本为
5.3.20.RELEASE,避免版本冲突。
调整后的依赖示例:
<dependency> <groupId>io.pivotal.spring.cloud</groupId> <artifactId>spring-cloud-services-starter-config-client</artifactId> <version>3.1.5.RELEASE</version> <type>pom</type> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>5.3.20.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-client</artifactId> <version>5.3.20.RELEASE</version> </dependency>
注意事项
- 确保所有Spring Security相关依赖(
spring-security-web、spring-security-oauth2-client等)版本完全一致,避免隐式依赖冲突。 - 若使用Maven,可通过
mvn dependency:tree命令检查依赖树,确认是否有第三方依赖引入了不一致的Spring Security版本,必要时通过<exclusions>标签排除冲突依赖。
内容的提问来源于stack exchange,提问作者Mayur Phanse
相关产品推荐
相关产品推荐

