Я использую 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 вместо запланированной работы. Буду признателен за любую помощь в этом.