feign 微服务调用的原理是发送一个http请求,此时不会携带原来的token,因此在调用另一个服务的接口的时候,token会丢失,需要在代码里面处理,把token携带过去;
一般http请求的token在请求头里面;
解决方案:
(1) 新增拦截器
在拦截器里面,获取token,然后加入到templete里面;
/**
* feign 调用丢失token解决方案,新增拦截器
* @return
*/
@Bean
public RequestInterceptor requestInterceptor(){
return templete -> {
ServletRequestAttributes requestAttributes =
(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
if(requestAttributes != null){
HttpServletRequest request = requestAttributes.getRequest();
if(request == null){
return ;
}else{
String token = request.getHeader("token");
templete.header("token",token);
}
}
};
}
一般需要将这块代码加入到所有涉及的微服务的拦截器里面;所以会加入到common模块里面