Java - 微服务整合Shiro和JWT解决OpenFeign携带Token问题

Java - 微服务整合Shiro和JWT解决OpenFeign携带Token问题

  • 一. OpenFeign调用携带Token

一. OpenFeign调用携带Token

一般情况下,我们微服务之间的服务调用可以通过OpenFeign来完成,但是它默认情况下,是不会把当前请求的相关请求头带过去的。

那这种情况下,在整合ShiroJWT的情况下,服务调用就会出现这个问题。

  1. 前端向服务A发送请求,携带了Token
  2. 服务A发现有Token,那么认证通过后,允许调用接口。但是服务A过程中通过OpenFeign调用了服务B。
  3. 调用服务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);
        }
    }
}

你可能感兴趣的:(Shiro/JWT,Java,java,微服务,开发语言)