如何使用Spring Security 5.2.x中的WebClient创建Feign Oauth2RequestInterceptor?

huangapple 未分类评论49阅读模式
英文:

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();
    }
}

huangapple
  • 本文由 发表于 2020年5月29日 17:46:19
  • 转载请务必保留本文链接:https://java.coder-hub.com/62083089.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定