feign远程调用丢失请求头信息

Feign远程调用丢失请求信息原因及解决办法

原因:使用feign向其他服务发起请求,相当于一个新创建一个请求,这个请求中没有包含原来的请求头信息

解决办法:使用拦截器进行拦截,拦截器的执行时间是在发送请求之前,所以可以使用拦截器来添加请求投信息

示意图:

在这里插入图片描述

代码示例:

@Configuration
public class FeignConfig{
	@Bean("requestInterceptor")
	public RequestInterceptor requestInterceptor(){
		return new RequestInterceptor(RequestTemplate template){
			//1、RequestContextHolder获取刚进来的请求
			RequestAttributes requestAttributes = (RequestAttributes)RequestContextHolder.getRequestAttributes();
			HttpServletRequest request = attributes.getRequest();
			//2、获取请求头信息
			String cookie = request.getHeader("Cookie");
			//3、给新请求同步老请求的cookie
			template.header("Cookie",cookie );
		}
	}
}

Feign异步调用丢失请求上下文原因及解决办法

原因:RequestContextHolder是通过ThreadLocal来获取请求头信息的,一个新的线程会有新的ThreadLocal,所以通过RequestContextHolder来获取请求头信息是获取不到的

解决办法:先获取主线程的ReqeustAttributes,然后把它放到信息成中

示意图
同步时

异步时

代码示例

.....some codes....
RequestAttributes requestAttrbutes = RequestContextHolder.getRequsetAttributes();

CompletableFuture<Void> future1 = CompletableFuture.runAsync(()->{
	...some codes...
	RequestAttributes.setAttributes(requestAttributes);
    ...some codes...
},exectors);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值