在微服务的开发中,我们需要经常操作服务和服务之前的通信,也就是说需要远程调用,但是在服务的调用中会发生一个严重的问题,就是都是请求头。
通过以上的介绍,我们如果想要解决这个问题,加上一个远程调用的拦截器就行,具体实现如下:
/**
* 处理Feign远程调用请求头丢失问题
*/
@Configuration
public class GulimallFeignConfig {
@Bean
public RequestInterceptor requestInterceptor(){
return new RequestInterceptor() {
@Override
public void apply(RequestTemplate requestTemplate) {
System.out.println("RequestInterceptor:"+ Thread.currentThread().getId());
//获取进来的请求
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if(requestAttributes != null){
//获取请求对象 老的请求
HttpServletRequest request = requestAttributes.getRequest();
//获取老请求头的数据
String cookie = request.getHeader("Cookie");
//将老请求头的数据 添加到新的请求头
requestTemplate.header("Cookie",cookie);
}
}
};
}
}