Feign 客户端 - 动态授权标头

2023-11-29

我有一项服务可以获取带有授权标头的 http 请求。 在处理请求时,我想使用 Feign Client 来查询另一个服务。对其他服务的查询应包含相同的授权标头。

目前,我使用 Filter 从传入请求中提取授权标头,并将标头存储在 ThreadLocal 中。 在构建 Feign 客户端时,我使用 RequestInterceptor 从 ThreadLocal 读取授权标头并将其放入对其他服务的请求中。

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

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


我想我找到了解决我的问题的方法。使用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));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Feign 客户端 - 动态授权标头 的相关文章

随机推荐