方法一@RequestHeader
在请求调用方的微服务方法头中添加@RequestHeader用来接收用户端请求时传入的token
@RequestMapping("/deleteByOpenId")
public Object deleteByOpenId(@RequestParam("opendId") String opendId,@RequestHeader("token") String token) {
Object integer = appMpLoginAuthFeginClient.deleteByOpenId(opendId,token);
return integer;
}
这里获取到header中的“token”
在采用Feign调用其他微服务时将获取到的Token传入到下一个微服务的请求头中
@RequestMapping("/rest/user-service/in/mpLoginAuth/deleteByOpenId")
Object deleteByOpenId(@RequestParam("opendId") String opendId,@RequestHeader("token") String token);
这里的@RequestHeader的意思是将参数token放入到下个请求的请求头header中。
方法二使用Feign的Interceptor
实现RequestInterceptor接口
重写RequestInterceptor接口的apply,获取到token
public class TokenRequestIntecepor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
// 从header获取X-token
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes srat = (ServletRequestAttributes) requestAttributes;
HttpServletRequest request = srat.getRequest();
String token = request.getHeader("token");
if (StringUtils.isNotBlank(token)) {
//将token传递出去
requestTemplate.header("token", token);
}
}
}
先获取到HTTPServletRequest
接着在从request中获取到header的“token”
将这个token传递给requestTemplate
Interceptor实现之后还需要对这个Interceptor设置配置
步骤二:配置Feign
application.yaml文件中添加如下配置
feign:
client:
config:
default:
loggerLevel: full
requestInterceptors:
- com.example.feigndemo.interceptor.TokenRequestIntecepor