程序员王小瑞 2023-08-25 11:36 采纳率: 19.2%
浏览 12

Feign远程调用401问题

今天遇到一个问题,项目中使用feign拦截请求,但是项目内部两个服务之间进行远程调用的时候,一直报错:
feign.FeignException: status 401 reading WmsApiPlatformService#queryBatch(String)
断点进入的时候发现拦截的attributes是null,个人判断这个问题是线程信息传递的问题,使用:

ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
       RequestContextHolder.setRequestAttributes(requestAttributes,true);

就不会报错了,但是这种解决方案很麻烦,不知道有没有更好的解决方案
这是feignconfig代码:

@Configuration
public class FeignConfig implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate requestTemplate) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if(null != attributes) {
            HttpServletRequest request = attributes.getRequest();
            // 检查是否有跳过拦截的标记
            if(request.getHeader("Skip-Interceptor") == null){
                requestTemplate.header(Constants.SERVER_CODE, request.getHeader(Constants.SERVER_CODE));
                requestTemplate.header(Constants.TOKEN, request.getHeader(Constants.TOKEN));
                requestTemplate.header(Constants.INTERFACE, request.getHeader(Constants.INTERFACE));
            }
        }
    }
}

这是:测试接口:

img


这是调用api:

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-25 15:29
    关注

    【相关推荐】



    • 文章:Feign调用超时时间设置,全局及某一个接口设置超时时间 中也许有你想要的答案,请看下吧
    • 除此之外, 这篇博客: Feign使用步骤详解及实操样例【Feign抽取、Feign继承】中的 4、使用feign-api进行调用 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
      import cn.feign.clients.UserClient;
      import cn.feign.pojo.User;
      import cn.order.mapper.OrderMapper;
      import cn.order.pojo.Order;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Service;
      
      @Service
      public class OrderService {
      
          @Autowired
          private OrderMapper orderMapper;
      
          @Autowired
          private UserClient userClient;
      
          public Order queryOrderById(Long orderId) {
              // 1.查询订单
              Order order = orderMapper.findById(orderId);
              // 2.用Feign远程调用
              User user = userClient.findById(order.getUserId());
              // 3.封装user到Order
              order.setUser(user);
              // 4.返回
              return order;
          }
      }
      

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 8月25日

悬赏问题

  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错
  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图
  • ¥15 关于#DMA固件#的问题,请各位专家解答!
  • ¥15 matlab生成的x1图不趋于稳定,之后的图像是稳定的水平线
  • ¥15 请问华为OD岗位的内部职业发展通道都有哪些,以及各个级别晋升的要求
  • ¥20 微信小程序 canvas 问题
  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式