Spring Boot项目ReactiveClientRegistrationRepository Bean缺失问题求助
解决Spring Boot中ReactiveClientRegistrationRepository Bean缺失问题
错误详情
通过方法‘webClient’参数0表达的依赖不满足;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:不存在类型为org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository的合格Bean,期望至少有一个符合自动注入条件的Bean。
相关配置
application.properties
spring.security.oauth2.client.registration.eipo.authorization-grant-type=client_credentials spring.security.oauth2.client.registration.eipo.token-uri=https://devapi.somedomain.co.xx/v1/auth/token spring.security.oauth2.client.registration.eipo.client-id=randomClientId spring.security.oauth2.client.registration.eipo.client-secret=T#%*sty%xp4^sdxb(e* spring.main.web-application-type= reactive
WebClientConfig配置类
@Configuration public class WebClientConfig { @Bean WebClient webClient(ReactiveClientRegistrationRepository clientRegistrations) { ServerOAuth2AuthorizedClientExchangeFilterFunction oauth = new ServerOAuth2AuthorizedClientExchangeFilterFunction( clientRegistrations, new UnAuthenticatedServerOAuth2AuthorizedClientRepository()); oauth.setDefaultClientRegistrationId("eipo"); return WebClient.builder() .filter(oauth) .build(); } }
SettlementService服务类
@Slf4j @Service public class SettlementService { @Autowired private WebClient webClient; public void getAuthThenGetResource(){ ... //trying to get token log.info("got token"); ... //get something from external resource log.info("got response"); } }
pom.xml依赖部分
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.10</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-rest-hal-explorer</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--feign client to call other API as datasource--> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-okhttp</artifactId> <version>10.11</version> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-gson</artifactId> <version>10.11</version> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-slf4j</artifactId> <version>10.11</version> </dependency> <dependency> <groupId>com.playtika.reactivefeign</groupId> <artifactId>feign-reactor-jetty</artifactId> <version>3.1.1</version> </dependency> <!--end of feign client dependencies--> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>1.5.20</version> <type>jar</type> </dependency> <!--WebClient --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-client</artifactId> <version>5.3.13.RELEASE</version> <type>jar</type> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build>
问题原因
- 依赖版本不匹配:Spring Boot 2.7.10对应的Spring Security版本为5.7.x,手动指定
spring-security-oauth2-client为5.3.13.RELEASE会导致版本冲突,缺失Reactive模式下自动配置ReactiveClientRegistrationRepository的相关类。 - 混合Web栈:同时引入
spring-boot-starter-web(Servlet栈)和spring-boot-starter-webflux(Reactive栈),即使设置了web-application-type=reactive,也可能干扰自动配置的加载逻辑。 - 自动配置未生效:旧版本的
spring-security-oauth2-client可能不支持基于Reactive的客户端注册仓库自动配置,导致Spring无法创建对应的Bean。
解决方案
- 移除手动指定的OAuth2客户端依赖版本:
删除spring-security-oauth2-client中的<version>5.3.13.RELEASE</version>,让Spring Boot父pom自动管理匹配版本:<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-oauth2-client</artifactId> </dependency> - 移除Servlet栈依赖:
删除spring-boot-starter-web和spring-boot-starter-tomcat依赖,避免和Reactive栈冲突:<!-- 移除这两个依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> - 验证配置:
确保application.properties中的OAuth2客户端配置正确,client_credentials模式下的token-uri、client-id、client-secret无误。
完成以上调整后,Spring Boot会自动创建ReactiveClientRegistrationRepository Bean,WebClient的依赖注入即可正常工作。
内容的提问来源于stack exchange,提问作者surianto
相关产品推荐
相关产品推荐

