一般情况下,我们微服务之间的服务调用可以通过OpenFeign来完成,但是它默认情况下,是不会把当前请求的相关请求头带过去的。
那这种情况下,在整合Shiro和JWT的情况下,服务调用就会出现这个问题。
Token。Token,那么认证通过后,允许调用接口。但是服务A过程中通过OpenFeign调用了服务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);
}
}
}