feign远程调用丢失请求头及异步丢失上下文问题

存在问题:Feign远程调用丢失请求头问题
feign在远程调用之前要构造请求,调用了很多的拦截器
1.浏览器发送请求,请求头自动带来了cookie 到order服务
2.order服务通过feign远程调用 cart服务
feign会创建一个新的request【这个请求没有带任何请求头】
没有带请求头,cart服务就认为没登录
解决:加上feign远程调用的请求拦截器

1、feign远程调用丢失请求头问题

feign请求调用之前将之前请求拦截数据放到feign调用的拦截请求数据中;如下配置

@Configuration
public class FeignConfig {

    @Bean("requestInterceptor")
    public RequestInterceptor requestInterceptor() {
        return new RequestInterceptor() {
            @Override
            public void apply(RequestTemplate template) {
                ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

                if (requestAttributes != null) {
                    HttpServletRequest request = requestAttributes.getRequest();//老请求
                    if (request != null) {
                        //同步请求头数据
                        String cookie = request.getHeader("Cookie");
                        template.header("Cookie", cookie);
                    }
                }
            }
        };
    }
}

2、feign远程异步调用丢失上下文问题

异步情况下保证主线程的ThreadLocal和附线程用同一个线程
 RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
CompletableFuture.runAsync(() -> {
            //附带当前请求拦截器数据
            RequestContextHolder.setRequestAttributes(requestAttributes);
            //TODO 
        }, executor);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值