版本
SpringCloud Gateway Zuul 改造成Gateway
OAuth2 升级成最新
SpringBoot、SpringCloud、SpringCloudAlibaba 对应的版本
<spring-boot.version>2.5.3</spring-boot.version>
<spring-cloud.version>2020.0.3</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
<spring-security-oauth2.version>2.2.5.RELEASE</spring-security-oauth2.version>
<!-- oauth2-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
<version>${spring-security-oauth2.version}</version>
</dependency>
报错内容
2021-08-17 15:22:57.465 WARN 29317 --- [ main] onfigReactiveWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.security.config.annotation.web.reactive.WebFluxSecurityConfiguration': Unsatisfied dependency expressed through method 'setSecurityWebFilterChains' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springSecurityFilterChain' defined in class path resource [com/zclh/gsch/gateway/config/ResourceServerConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.security.web.server.SecurityWebFilterChain]: Factory method 'springSecurityFilterChain' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jwtDecoder' defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/resource/reactive/ReactiveOAuth2ResourceServerJwkConfiguration$JwtConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.security.oauth2.jwt.ReactiveJwtDecoder]: Factory method 'jwtDecoder' threw exception; nested exception is java.lang.NoSuchMethodError: com.nimbusds.jose.proc.JWSVerificationKeySelector.<init>(Ljava/util/Set;Lcom/nimbusds/jose/jwk/source/JWKSource;)V
2021-08-17 15:22:57.465 INFO 29317 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-0} closing ...
2021-08-17 15:22:57.490 INFO 29317 --- [ main] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2021-08-17 15:22:57.503 ERROR 29317 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
An attempt was made to call a method that does not exist. The attempt was made from the following location:
org.springframework.security.oauth2.jwt.NimbusReactiveJwtDecoder$JwkSetUriReactiveJwtDecoderBuilder.jwsKeySelector(NimbusReactiveJwtDecoder.java:366)
The following method did not exist:
com.nimbusds.jose.proc.JWSVerificationKeySelector.<init>(Ljava/util/Set;Lcom/nimbusds/jose/jwk/source/JWKSource;)V
The method's class, com.nimbusds.jose.proc.JWSVerificationKeySelector, is available from the following locations:
jar:file:/Users/eistert/.m2/repository/com/nimbusds/nimbus-jose-jwt/8.16/nimbus-jose-jwt-8.16.jar!/com/nimbusds/jose/proc/JWSVerificationKeySelector.class
The class hierarchy was loaded from the following locations:
com.nimbusds.jose.proc.JWSVerificationKeySelector: file:/Users/eistert/.m2/repository/com/nimbusds/nimbus-jose-jwt/8.16/nimbus-jose-jwt-8.16.jar
com.nimbusds.jose.proc.AbstractJWKSelectorWithSource: file:/Users/eistert/.m2/repository/com/nimbusds/nimbus-jose-jwt/8.16/nimbus-jose-jwt-8.16.jar
Action:
Correct the classpath of your application so that it contains a single, compatible version of com.nimbusds.jose.proc.JWSVerificationKeySelector
Disconnected from the target VM, address: '127.0.0.1:49668', transport: 'socket'
意思就是pom.xml里面的依赖包有重复,需要将重复的依赖包删除
我这里的原因是
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>nimbus-jose-jwt</artifactId>
<version>8.16</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
</dependency>
这两个依赖存在冲突,在最外层排掉排掉这个依赖就可以启动网关了。
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>nimbus-jose-jwt</artifactId>
<version>8.16</version>
</dependency>