调用feign接口时,如何往header中添加参数

2022年8月11日12:15:59

Controller接收到请求后,我们可以在service中通过feign直接调用其它服务的接口,但是,controller接收到的请求和通过feign调用其它服务,其它服务接收到的请求,是不一样的。例如我们往往习惯于在header中放入用户的token信息,在不做处理的情况下,其它服务接收到的请求,可能就是无用户信息状态,这种请求应该判定为无效状态。

在服务的提供方或者调用方定义一个拦截器,将当前请求的token信息手动添加到feign请求的header中。

@ConfigurationpublicclassFeignRequestInterceptorConfigimplementsRequestInterceptor{@BeanpublicRequestContextListenerrequestContextListener(){returnnewRequestContextListener();}@Overridepublicvoidapply(RequestTemplate requestTemplate){ServletRequestAttributes attributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();if(ObjectUtils.isEmpty(attributes)){return;}HttpServletRequest request= attributes.getRequest();String token= request.getHeader("token");
		requestTemplate.header("token", token);}}

在使用过程中,可能会涉及到在请求方获取自己的token信息都是为空的,查看一下是否是Hystrix策略导致的,如下配置可以解决该问题。

hystrix:
  command:default:
      execution:
        timeout:
          #如果enabled设置为false,则请求超时交给ribbon控制
          enabled:true
        isolation:
          # 隔离策略
          strategy: SEMAPHORE
          thread:
            timeoutInMilliseconds:100000
  • 作者:穿条秋裤到处跑
  • 原文链接:https://roswu.blog.csdn.net/article/details/121955452
    更新时间:2022年8月11日12:15:59 ,共 965 字。