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

问题

  • 项目中我使用feign进行远程调用时,在请求头设置了参数(UserId),结果在调用方却收获取不到...
    image

解决办法

  • feign提供了一个拦截器,在远程调用之前执行
    image

核心代码

package com.qbb.qmall.web.feign;

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

/**
 * @author QiuQiu&LL (个人博客:https://www.cnblogs.com/qbbit)
 * @version 1.0
 * @date 2022-06-04  23:04
 * @Description:远程调用拦截器
 */
@Component
public class UserHeaderRequestInterceptor implements RequestInterceptor {
    /**
     * ThreadLocal<HttpServletRequest> : 可以使用ThreadLocal自己存
     * RequestContextHolder : 也可以使用Spring框架自己提供的
     */

    @Override
    public void apply(RequestTemplate requestTemplate) {
        // 每个线程会有一个请求对象
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        // 获取原来请求中的数据
        String userId = requestAttributes.getRequest().getHeader("UserId");
        String UserTempId = requestAttributes.getRequest().getHeader("UserTempId");
        if (userId != null) {
            // 设置到通过模板new的新的请求中
            requestTemplate.header(
                    "UserId", userId);
        }
        if (UserTempId != null) {
            // 设置到通过模板new的新的请求中
            requestTemplate.header(
                    "UserTempId", UserTempId);
        }
    }
}

posted @   我也有梦想呀  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示