Java - 微服务整合Shiro和JWT解决OpenFeign携带Token问题
一. OpenFeign调用携带Token
一般情况下,我们微服务之间的服务调用可以通过OpenFeign来完成,但是它默认情况下,是不会把当前请求的相关请求头带过去的。
那这种情况下,在整合Shiro
和JWT
的情况下,服务调用就会出现这个问题。
- 前端向服务A发送请求,携带了
Token
。 - 服务A发现有
Token
,那么认证通过后,允许调用接口。但是服务A过程中通过OpenFeign
调用了服务B。 - 调用服务B的时候,服务B的拦截器发现请求没有
Token
,视为没有登录,请求失败。那么这个调用链就是残缺的。
解决,我们可以写一个拦截器。再发送请求前再把Token
丢进去即可。可以通过实现RequestInterceptor
接口的apply
方法,那么OpenFeign
在发送请求之前都会调用该接口的apply
方法。创建一个FeignConfig
:
@Configuration
public class FeignConfig implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
// 拿到当前请求Request
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
String token = request.getHeader("token");
if (token != null) {
requestTemplate.header("token",token);
}
}
}