英文:
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语言的经验与见解,让所有开发者获益!

评论