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,以便追蹤執行鏈。