Spring 外部客户端-动态授权标头

Spring 外部客户端-动态授权标头,spring,authentication,netflix-feign,spring-cloud-feign,Spring,Authentication,Netflix Feign,Spring Cloud Feign,我有一个服务,它获取带有授权头的http请求。 在处理请求时,我想使用一个外部客户机来查询另一个服务。对其他服务的查询应包含相同的授权标头 目前,我使用一个过滤器从传入的请求中提取授权标头,并将标头存储在ThreadLocal中。 在构建外部客户机时,我使用RequestInterceptor从ThreadLocal读取授权头,并将其放入对其他服务的请求中 这种方法并不理想,因为当我开始使用RxJava或Hystrix时,线程在处理请求时会发生变化,我必须将授权头ThreadLocal从一个线程

我有一个服务,它获取带有授权头的http请求。 在处理请求时,我想使用一个外部客户机来查询另一个服务。对其他服务的查询应包含相同的授权标头

目前,我使用一个过滤器从传入的请求中提取授权标头,并将标头存储在ThreadLocal中。 在构建外部客户机时,我使用RequestInterceptor从ThreadLocal读取授权头,并将其放入对其他服务的请求中

这种方法并不理想,因为当我开始使用RxJava或Hystrix时,线程在处理请求时会发生变化,我必须将授权头ThreadLocal从一个线程移动到另一个线程

解决这个问题的其他选择是什么?
我考虑的一种方法是为每个请求创建一个新的佯装客户端,这样我就不再需要将授权存储在本地线程中。但这是个好主意吗?

我想我找到了解决问题的办法。使用
RequestContextHolder
我可以获得对原始请求的引用(也来自派生的子线程),并从那里复制头:

public class AuthForwardInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate template) {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        template.header(HttpHeaders.AUTHORIZATION, request.getHeader(HttpHeaders.AUTHORIZATION));
    }
}

很好用!以防万一,我不知道是否有必要在“公共类AuthForwardInterceptor实现RequestInterceptor”的顶部添加@Component注释。另外,这也是我需要导入的内容:import javax.servlet.http.HttpServletRequest;导入org.springframework.http.HttpHeaders;导入org.springframework.stereotype.Component;导入org.springframework.web.context.request.RequestContextHolder;导入org.springframework.web.context.request.ServletRequestAttributes;进口外国请求拦截器;导入外文请求模板;