1

AccessToken を OAuth2ClientContext から RequestTemplate のヘッダーに自動的にコピーする RequestInterceptor があるため、内部サービスは、シナリオを開始したモバイル デバイスから取得したものと同じ AccessToken を使用して相互にシームレスに呼び出します。これが、サービス メソッドの承認を管理する方法です。これはインターセプター コードです。

public class FeignOAuthInterceptor implements RequestInterceptor {
    private OAuth2ClientContext oauth2ClientContext;

    public FeignOAuthInterceptor (OAuth2ClientContext oauth2ClientContext) {
        this.oauth2ClientContext = oauth2ClientContext;
    }
    @Override
    public void apply(RequestTemplate template) {
        if (!template.headers().containsKey(PropertyBagFilter.AUTHORIZATION_HEADER) && oauth2ClientContext.getAccessTokenRequest().getExistingToken() != null) {
            template.header(PropertyBagFilter.AUTHORIZATION_HEADER, String.format("%s %s", PropertyBagFilter.BEARER_TOKEN_TYPE,
                    oauth2ClientContext.getAccessTokenRequest().getExistingToken().toString()));
        }
    }
}

これは @Beans 構成です。

    @Bean
    public OAuth2ClientContext oAuth2ClientContext (){
        return new DefaultOAuth2ClientContext();
    }

    @Bean
    public RequestInterceptor feignOAuthInterceptor(OAuth2ClientContext oauth2ClientContext) {
        return new FeignOAuthInterceptor(oauth2ClientContext);
    }
    @Bean
    public OAuth2ProtectedResourceDetails oAuth2ProtectedResourceDetails(){
        return new ResourceOwnerPasswordResourceDetails();
    }

問題は、さまざまな FeignClient があり、その一部が SMS テキストに使用するサービスなどのサードパーティ サービス用であり、そこに AccessToken を送信したくないことです。

RequestInterceptor 内でどの FeignClient から来たのかを判断するにはどうすればよいですか?

4

0 に答える 0