0
点赞
收藏
分享

微信扫一扫

Feign远程/异步调用丢失请求头的问题

书呆鱼 2022-01-15 阅读 71

Feign远程调用丢失请求头的问题

解决方法:加上一个feing远程调用的请求拦截器,在拦截器中给template加上一个客户端传过来的cookie,和客户端发送过来的请求的请求头进行同步。

@Bean("requestInterceptor")
public RequestInterceptor requestInterceptor() {

    return new RequestInterceptor() {
        @Override
        public void apply(RequestTemplate template) {
            //1、使用RequestContextHolder拿到刚进来的请求数据
            ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

            if (requestAttributes != null) {
                //老请求
                HttpServletRequest request = requestAttributes.getRequest();

                if (request != null) {
                    //2、同步请求头的数据(主要是cookie)
                    String cookie = request.getHeader("Cookie");
                    //把老请求的cookie值放到新请求上来,进行一个同步
                    template.header("Cookie", cookie);
                }
            }
        }
    };
}

Feign异步调用丢失请求头的问题

解决方法:在执行异步任务之前先获取请求信息,等开始异步任务时再在每一个线程里面放入之前获取到的请求信息


 //TODO :获取当前线程请求头信息(解决Feign异步调用丢失请求头问题)
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();

//开启第一个异步任务
CompletableFuture<Void> addressFuture = CompletableFuture.runAsync(() -> {
    //每一个线程都来共享之前的请求数据
    RequestContextHolder.setRequestAttributes(requestAttributes);
    //执行任务
    xxxxxxxxxxxxxxxxxxx;
}, threadPoolExecutor);

举报

相关推荐

0 条评论