Feign远程调用丢失请求头问题
Feign远程调用丢失请求头问题
- 模型图
- 解决办法
加上feign远程调用的请求拦截器
@Configuration
public class FeignConfig {
@Bean("requestInterceptor")
public RequestInterceptor requestInterceptor() {
return new RequestInterceptor() {
@Override
public void apply(RequestTemplate requestTemplate) {
//拿到刚进来的这个请求
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
//同步请求头数据,cookie
String cookie = request.getHeader("Cookie");
requestTemplate.header("Cookie", cookie);
}
};
}
}
Feign异步情况丢失上下文问题
- 模型图
- 解决办法
在主线程拿到原始请求数据
...
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
...
在每一个异步线程中重新获取数据
....
RequestContextHolder.setRequestAttributes(requestAttributes);
....