spring cloud gateway在使用GlobalFilter的时候需要去通过fegin调用其他微服务,如何在fegin调用的时候带上请求过来的请求头?
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);
}
}
}
}
}
真奇怪,现在gateway改用tomcat容器了吗,Netty容器的话没有servletrequest的概念,你可以选择自己维护threadlocal变量也是一样的,或者看看httpserverrequest有没有对应的ThreadLocal变量区
把你调用的代码发出来看看吧,你评论里说获取到的attributes为null,我怀疑是gateway使用了线程池处理请求转发。