Feign服务之间的鉴权问题

Feign服务调服务传递数据的时候,需要带token验证的,而调用那个用户服务的时候被用户服务方拦截然后没有token进不去接口,很明显的是因为没有token导致,那么Feign里面有提供一个接口叫做RequestInterceptor,只要实现这个接口,简单做一些处理,比如说我们验证请求头的token叫Access-Token,我们就先取出当前请求的token,然后放到feign请求头上,再去请求接口。

解决方案: 直接上代码

public class AuthRequestInterceptor implements RequestInterceptor {
          
   
  private static final Logger log = LoggerFactory.getLogger(AuthRequestInterceptor.class);

  @Override
  public void apply(RequestTemplate requestTemplate) {
          
   
    try {
          
   
      Map<String, String> headers = getHeaders();
      List<String> cookies = getCookie();

      if (null != cookies && cookies.size() > 0) {
          
   
        log.info("cookie: {}", cookies);
        requestTemplate.header("Cookie", cookies.stream().collect(Collectors.joining(";")));
      }
      for (String headerName : headers.keySet()) {
          
   
        requestTemplate.header(headerName, headers.get(headerName));
      }
    } catch (Exception e) {
          
   
      e.printStackTrace();
    }
  }

  private Map<String, String> getHeaders() {
          
   
    HttpServletRequest request =
        ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    Map<String, String> map = new LinkedHashMap<>();
    Enumeration<String> enumeration = request.getHeaderNames();
    while (enumeration.hasMoreElements()) {
          
   
      String key = enumeration.nextElement();
      String value = request.getHeader(key);
      map.put(key, value);
    }
    return map;
  }

  private List<String> getCookie() {
          
   
    HttpServletRequest request =
        ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    List<String> cookies = new ArrayList<>();
    if(null == request || null == request.getCookies()){
          
   
      return null;
    }
    for (Cookie it : request.getCookies()) {
          
   
      if ("mips_token".equals(it.getName())) {
          
   
        cookies.add("token=" + it.getValue());
      }
    }
    return cookies;
  }
}
经验分享 程序员 微信小程序 职场和发展