1

我有一个 RequestInterceptor,我在其中自动将 OAuth2ClientContext 中的 AccessToken 复制到 RequestTemplate 的标头中,以便内部服务使用来自启动场景的移动设备的相同 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();
    }

问题是有不同的 FeignClients,其中一部分用于 3rd 方服务,例如我们用于 SMS 文本的服务,我不想在那里发送 AccessToken。

我如何在 RequestInterceptor 内部确定它来自什么 FeignClient?

4

0 回答 0