Нет подходящего компонента типа «org.springframework.security.oauth2.client.registration.ClientRegistrationRepository»

Когда я пытаюсь создать свой проект, я получаю это сообщение об ошибке:

: Unsatisfied dependency expressed through method 'webClient' parameter 0; 
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No qualifying bean of type 
'org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository' 
available: expected at least 1 bean which qualifies as autowire candidate.

это мое приложение.Свойства:

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

это мой класс конфигурации:

@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();
  }
}

это класс обслуживания:


@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>

Я включил родительскую и зависимую часть. Этот pom.xml может быть причиной, но я не уверен. Что не так с bean-компонентом webclient? Я пробовал много решений, которые нашел в stackoverflow, ни одно из них не сработало. Спасибо за помощь.

Да, нам нужен твой помпон

John Williams 12.04.2023 20:10

Я включил родительскую и зависимую часть pom.xml. Спасибо :)

surianto 13.04.2023 02:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
661
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть два элемента, которые нужно исправить.

Самое главное, что касается отсутствующих бобов, - это отсутствующий «стартер». В pom.xml заменить

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-oauth2-client</artifactId>
    <version>5.3.13.RELEASE</version>
    <type>jar</type>
</dependency>

с

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

Когда это исправлено, он жалуется на отсутствующий идентификатор провайдера. Добавление следующего в application.properties исправило это. Вам нужно заменить github любым провайдером, связанным с eipo:

spring.security.oauth2.client.registration.eipo.provider=github

об этом свойстве: spring.security.oauth2.client.registration.eipo.provider Я не знаю, что сюда добавить. Я получаю только эти 4: токен uri, идентификатор клиента, секретный код клиента, Swagger doc uri. Означает ли это, что этот внешний API еще не поддерживает это решение? FYi: я продолжил свой проект без этого решения, я использую этот примитивный древний код ради прогресса: HttpResponse resp = httpclient.execute(httppost); Строка respStr = EntityUtils.toString(resp.getEntity());

surianto 14.04.2023 03:13

Я обязательно попрошу у этого поставщика spring.security.oauth2.client.registration.eipo.provider, но в случае, если они не смогут его предоставить, мой проект будет продолжать развиваться даже с примитивным/устаревшим кодом. :)

surianto 14.04.2023 03:41

Я решил заданный вопрос: _ Нет подходящего компонента типа «org.springframework.security.oauth2.client.registration.Rea‌​ctiveClientRegistrat‌​ionRepository»_ Пожалуйста, примите мой ответ.

John Williams 14.04.2023 04:54

Другие вопросы по теме