feign请求头传递

  • 前言:在我们token进行鉴权操作时,使用feign进行请求转发会导致请求头的丢失,这个时候就需要进行请求头的传递操作
1. 创建feign拦截器
 @Component
  public class FeignRequestInterceptor implements RequestInterceptor {
      @Override
      public void apply(RequestTemplate requestTemplate) {
          ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
                  .getRequestAttributes();
          if (Objects.isNull(attributes)){
              return;
          }
          HttpServletRequest request = attributes.getRequest();
          Enumeration<String> headerNames = request.getHeaderNames();
          if (headerNames != null) {
              while (headerNames.hasMoreElements()) {
                  String name = headerNames.nextElement();
                  String values = request.getHeader(name);
                  requestTemplate.header(name, values);
              }
          }
      }
  }
2. Hystrix透传ThreadLocal数据
  @Component
  public class RequestAttributeHystrixConcurrencyStrategy extends HystrixConcurrencyStrategy {
  
      public RequestAttributeHystrixConcurrencyStrategy() {
          try {
              HystrixPlugins.reset();
              HystrixPlugins.getInstance().registerConcurrencyStrategy(this);
          }
          catch (Exception e) {
              e.printStackTrace();
          }
      }
  
      @Override
      public <T> Callable<T> wrapCallable(Callable<T> callable) {
          RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
          return  new Callable<T>() {
              @Override
              public T call() throws Exception {
                  RequestContextHolder.setRequestAttributes(requestAttributes);
                  return callable.call();
              }
          };
      }
  
  }

你可能感兴趣的:(Spring全家桶,java,spring)