特定FeignClient的RequestIntercepor

时间:2016-07-27 13:06:09

标签: spring-security-oauth2 spring-cloud-netflix netflix-feign spring-cloud-feign feign

我有一个RequestInterceptor,我自动将OAT2ClientContext中的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,其中一部分用于第三方服务,例如我们用于SMS文本的服务,我不想在那里发送AccessToken。

如何在RequestInterceptor内部确定它来自哪个FeignClient?

0 个答案:

没有答案