You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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>

问题原因

  1. 依赖版本不匹配:Spring Boot 2.7.10对应的Spring Security版本为5.7.x,手动指定spring-security-oauth2-client为5.3.13.RELEASE会导致版本冲突,缺失Reactive模式下自动配置ReactiveClientRegistrationRepository的相关类。
  2. 混合Web栈:同时引入spring-boot-starter-web(Servlet栈)和spring-boot-starter-webflux(Reactive栈),即使设置了web-application-type=reactive,也可能干扰自动配置的加载逻辑。
  3. 自动配置未生效:旧版本的spring-security-oauth2-client可能不支持基于Reactive的客户端注册仓库自动配置,导致Spring无法创建对应的Bean。

解决方案

  1. 移除手动指定的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>
    
  2. 移除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>
    
  3. 验证配置:
    确保application.properties中的OAuth2客户端配置正确,client_credentials模式下的token-uri、client-id、client-secret无误。

完成以上调整后,Spring Boot会自动创建ReactiveClientRegistrationRepository Bean,WebClient的依赖注入即可正常工作。

内容的提问来源于stack exchange,提问作者surianto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:08:14