英文:
How to create Feign Oauth2RequestIntercetor using WebClient with Spring Security 5.2.x?
问题
以下是翻译好的部分:
我在我的应用程序中使用了 Spring Security 5.2 中的 Feign 客户端,需要将 API 绑定从 RestTemplate
更改为 WebClient
。我配置了我的 Web 客户端,使用了带有 OAuth2AuthorizedClientManager
的 Web 客户端,以管理由 client_credentials
流程提供的访问令牌。现在,我想为我的 Feign 客户端创建一个 RequestInterceptor
,该拦截器将使用这个 WebClient
。我应该如何实现这个?
以下是我的 WebClientConfiguration
:
@Configuration
public class WebClientConfig {
@Bean
public OAuth2AuthorizedClientManager authorizedClientManager(
ClientRegistrationRepository clientRegistrationRepository,
OAuth2AuthorizedClientService clientService) {
OAuth2AuthorizedClientProvider authorizedClientProvider =
OAuth2AuthorizedClientProviderBuilder.builder()
.refreshToken()
.clientCredentials()
.build();
AuthorizedClientServiceOAuth2AuthorizedClientManager authorizedClientManager =
new AuthorizedClientServiceOAuth2AuthorizedClientManager(
clientRegistrationRepository, clientService);
authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider);
return authorizedClientManager;
}
@Bean
WebClient azureGraphAPIWebClient(OAuth2AuthorizedClientManager authorizedClientManager) {
ServletOAuth2AuthorizedClientExchangeFilterFunction oauth2Client =
new ServletOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager);
oauth2Client.setDefaultClientRegistrationId("registration-id");
return WebClient.builder()
.apply(oauth2Client.oauth2Configuration())
.build();
}
}
英文:
I am using Feign client in my application with Spring Security 5.2 which is required swapping API bindings from RestTemplate
to the WebClient
. I configured my web client to use web client with OAuth2AuthorizedClientManager
to manage access token provided by client_credentials
flow. And now I want to create Feign's RequestInterceptor
for my Feign client which will use this WebClient
. How do I do this?
Here's my WebClientConfiguration
:
@Configuration
public class WebClientConfig {
@Bean
public OAuth2AuthorizedClientManager authorizedClientManager(
ClientRegistrationRepository clientRegistrationRepository,
OAuth2AuthorizedClientService clientService) {
OAuth2AuthorizedClientProvider authorizedClientProvider =
OAuth2AuthorizedClientProviderBuilder.builder()
.refreshToken()
.clientCredentials()
.build();
AuthorizedClientServiceOAuth2AuthorizedClientManager authorizedClientManager =
new AuthorizedClientServiceOAuth2AuthorizedClientManager(
clientRegistrationRepository, clientService);
authorizedClientManager.setAuthorizedClientProvider(authorizedClientProvider);
return authorizedClientManager;
}
@Bean
WebClient azureGraphAPIWebClient(OAuth2AuthorizedClientManager authorizedClientManager) {
ServletOAuth2AuthorizedClientExchangeFilterFunction oauth2Client =
new ServletOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientManager);
oauth2Client.setDefaultClientRegistrationId("registration-id");
return WebClient.builder()
.apply(oauth2Client.oauth2Configuration())
.build();
}
}
专注分享java语言的经验与见解,让所有开发者获益!
评论