Когда я пытаюсь создать свой проект, я получаю это сообщение об ошибке:
: 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, ни одно из них не сработало. Спасибо за помощь.
Я включил родительскую и зависимую часть pom.xml. Спасибо :)
У вас есть два элемента, которые нужно исправить.
Самое главное, что касается отсутствующих бобов, - это отсутствующий «стартер». В 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());
Я обязательно попрошу у этого поставщика spring.security.oauth2.client.registration.eipo.provider, но в случае, если они не смогут его предоставить, мой проект будет продолжать развиваться даже с примитивным/устаревшим кодом. :)
Я решил заданный вопрос: _ Нет подходящего компонента типа «org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository»_ Пожалуйста, примите мой ответ.
Да, нам нужен твой помпон