spring cloud gateway在使用GlobalFilter的时候需要去通过fegin调用其他微服务,如何在fegin调用的时候带上请求过来的请求头?

spring cloud gateway在使用GlobalFilter的时候需要去通过fegin调用其他微服务,如何在fegin调用的时候带上请求过来的请求头?

现在通过RequestInterceptor拦截器去拦截的时候,ServletRequestAttributes是获取不到的

GlobalFilter 难道你拿不到你想要的请求头?
那我RequestInterceptor可不可以从多个维度获取请求头?

在feign请求的时候直接把所有请求头或者指定请求头复制呗

@Component
public class FeignRequestInterceptorConfig implements RequestInterceptor {

  @Override
  public void apply(RequestTemplate requestTemplate) {
    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
            .getRequestAttributes();
    HttpServletRequest request = attributes.getRequest();
    if (request != null) {
      // 只携带token
      // String authorization = request.getHeader("Authorization");
      // requestTemplate.header("Authorization", authorization);
      // 携带全部
      Enumeration<String> headerNames = request.getHeaderNames();
      if (headerNames != null) {
        while (headerNames.hasMoreElements()) {
          String name = headerNames.nextElement();
          String values = request.getHeader(name);
          requestTemplate.header(name, values);
        }
      }
    }
  }
}

看我之前写的这篇吧
https://blog.csdn.net/qq_41885819/article/details/121955452?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166746472616782417015983%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166746472616782417015983&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-121955452-null-null.nonecase&utm_term=feign&spm=1018.2226.3001.4450

真奇怪,现在gateway改用tomcat容器了吗,Netty容器的话没有servletrequest的概念,你可以选择自己维护threadlocal变量也是一样的,或者看看httpserverrequest有没有对应的ThreadLocal变量区

把你调用的代码发出来看看吧,你评论里说获取到的attributes为null,我怀疑是gateway使用了线程池处理请求转发。