Сервлет Spring MVC с учетными данными клиента WebClient и OAuth - PullRequest
0 голосов
/ 28 октября 2019

Я использую WebClient в приложении Spring MVC на основе сервлетов (безреактивный) для доступа к ресурсам через HTTP из других микросервисов. Немногие из ресурсов защищены потоком OAuth2 client_credentials. Очень удобно настроить RestTemplate с OAuth2 Client Credentials, но сейчас я застрял, настраивая то же самое с WebClient. Я всегда могу получить токен Bearer вручную, а затем установить его в методе WebCLient setBearerAuth(), но это требует много ручного подключения. Мой вопрос - поддерживает ли WebClient Exchange Filter для автоматического потока учетных данных клиента при использовании в приложении Spring MVC?

ОБНОВЛЕНИЕ: Я обнаружил ServletOAuth2AuthorizedClientExchangeFilterFunction, который должен разрешать поток аутентификации учетных данных клиента. Я использую следующий код:

@Bean
WebClient webClient(ClientRegistrationRepository clientRegistrations, OAuth2AuthorizedClientRepository authorizedClients) {
    ServletOAuth2AuthorizedClientExchangeFilterFunction oauth2 =
            new ServletOAuth2AuthorizedClientExchangeFilterFunction(clientRegistrations, authorizedClients);
    oauth2.setDefaultClientRegistrationId("cart67");
    oauth2.setDefaultOAuth2AuthorizedClient(true);
    final WebClient webClient = WebClient.builder()
            .apply(oauth2.oauth2Configuration())
            .build();
    return webClient;
}

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

reactor.core.Exceptions$ErrorCallbackNotImplemented: 
           java.lang.IllegalArgumentException: request cannot be null
Caused by: java.lang.IllegalArgumentException: request cannot be null
at org.springframework.util.Assert.notNull(Assert.java:198)
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:

Все работает хорошо, если я использую этот WebClient с контроллера MVC вместо запланированной работы. Буду признателен за любую помощь в этом.

...