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

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