【feign进行远程调用丢失请求头问题】

本文探讨了Feign在进行远程调用时可能丢失请求头的问题,通过自定义拦截器实现同步请求头信息,并特别针对异步调用提供了处理方法,确保请求上下文的正确性。
摘要由CSDN通过智能技术生成

feign进行远程调用丢失请求头问题

问题:feign进行远程调用丢失请求头

在这里插入图片描述

原因:

feign在进行远程调用时会构建建一个新的request对象

解决:

自定义一个feign的拦截器,同步请求头信息

在这里插入图片描述

核心代码:

@Configuration
public class MyFeignInterceptor {

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

        RequestInterceptor requestInterceptor = 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)
                        //把老请求的cookie值放到新请求上,进行一个同步
                        String cookie = request.getHeader("Cookie");
                        template.header("Cookie", cookie);
                        //同步所有的
                        /*Enumeration<String> headerNames = request.getHeaderNames();
                    	while (headerNames.hasMoreElements()) {
                       		String name = headerNames.nextElement();
                        	String value = request.getHeader(name);
                       		template.header(name,value);
                   		}*/
                    }
                }
            }
        };
        return requestInterceptor;
    }
}

Feign异步情况丢失上下文问题

在这里插入图片描述

解决:

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

//开启第一个异步任务
CompletableFuture<Void> addressFuture = CompletableFuture.runAsync(() -> {

    //每一个线程都来共享之前的请求数据
    RequestContextHolder.setRequestAttributes(requestAttributes);

    //业务操作
    ...........
}, threadPoolExecutor);
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值