Spring 应用中,经常使用Spring RestTemplate作为客户端向服务端发送Restful请求,如果每次请求都需要在http Header中添加相同的信息,可以通过ClientHttpRequestInterceptor来进行实现。
public class UserContextInterceptor implements ClientHttpRequestInterceptor { private static final Logger logger = LoggerFactory.getLogger(UserContextInterceptor.class); @Override public ClientHttpResponse intercept( HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { HttpHeaders headers = request.getHeaders(); headers.add(UserContext.CORRELATION_ID, UserContextHolder.getContext().getCorrelationId()); headers.add(UserContext.AUTH_TOKEN, UserContextHolder.getContext().getAuthToken()); return execution.execute(request, body); } }
分布式调用中,可以通过RestTemplate的调用链路中添加关联ID,以便追踪执行链。