我有一个 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?