Как создать объект WebClient в весеннем приложении с помощью oauth2 - PullRequest
0 голосов
/ 18 июня 2019

Я разрабатываю весеннее приложение (клиент), которое защищено поставщиком OAuth2.Это приложение должно выполнить некоторые вызовы REST для другого весеннего приложения (сервера ресурсов).Для выполнения вызовов REST я буду использовать Spring WebClient.

Поэтому я пытаюсь создать компонент типа WebClient, который можно найти в нескольких блогах.

@Configuration
public class AppConfig {

    @Bean
    public WebClient webClient(ReactiveClientRegistrationRepository clientRegistrations) {
        ServerOAuth2AuthorizedClientExchangeFilterFunction oauth =
             new ServerOAuth2AuthorizedClientExchangeFilterFunction(clientRegistrations,
                new UnAuthenticatedServerOAuth2AuthorizedClientRepository());
        oauth.setDefaultClientRegistrationId("myprovider");
        return WebClient.builder().filter(oauth).build();
    }
}

При запуске приложенияЯ получаю следующую ошибку:

The following candidates were found but could not be injected:
    - Bean method 'clientRegistrationRepository' in 'ReactiveOAuth2ClientAutoConfiguration' not loaded because NoneNestedConditions 1 matched 0 did not; NestedCondition on ReactiveOAuth2ClientAutoConfiguration.NonServletApplicationCondition.ServletApplicationCondition found 'session' scope


Action:

Consider revisiting the entries above or defining a bean of type 'org.springframework.security.oauth2.client.registration.ReactiveClientRegistrationRepository' in your configuration.

Поскольку некоторые сайты рекомендуют именно этот код для создания экземпляра WebClient при использовании аутентификации OAuth2, мне интересно, что я делаю неправильно?

у вас есть предложения для меня?

Спасибо.

1 Ответ

0 голосов
/ 20 июня 2019

У меня такая же проблема.Я изменил код, как показано на видео: https://www.youtube.com/watch?v=1N-xwmoN83w&t=1569s, и это сработало

@Bean
 public WebClient webClient(ClientRegistrationRepository clientRegistrationRepository , OAuth2AuthorizedClientRepository authorizedClientRepository) {
        ServletOAuth2AuthorizedClientExchangeFilterFunction oauth =
             new ServletOAuth2AuthorizedClientExchangeFilterFunction (clientRegistrationRepository , authorizedClientRepository);
        return WebClient.builder().apply(oauth.oauth2Configuration()).build();
    }

Надеюсь, это поможет.

...