0

我有多个微服务

1. MangerApp 
2. ProcessApp
3. DoingStuffApp
4. .....

“MangerApp 微服务”得到一个Http-Request 我正在寻找一种方法来自动传输HTTP headers 调用中的一些内容,而我不想遍历每个地方并做 - 添加标头,我的HTTP标头存储为线程本地地图

因为我打电话给 other microservicesRestTemplate所以我有很多不同的调用,有些会get/post/put/etc... 改变它们,手动传递标题并不是那么有效。我正在寻找一种管理它的方法,而不是扩展RestTemplate Class现在。

4

1 回答 1

4

您可以使用 aClientHttpRequestInterceptor来实现您所需要的。

1)创建一个HeaderInterceptor实施ClientHttpRequestInterceptor。在此示例中,它从 ThreadLocal 获取 Authorization 和 Accept 标头并传播它们:

public class HeaderInterceptor implements ClientHttpRequestInterceptor{

    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {

                    HttpHeaders headers = request.getHeaders();
        List<String> authorization = HeaderThreadLocal.getAuthorization()
        List<String> accept = HeaderThreadLocal.getAuthorization();

        headers.addAll("Authorization", authorization);
        headers.addAll("Accept", accept);
        return execution.execute(request, body);
    }
}

2)配置你的RestTemplatebean添加头拦截器:

restTemplate.getInterceptors().add(new HeaderInterceptor());
于 2020-06-14T12:51:13.313 回答