原因:
因为浏览器请求第一个模块携带的token和各类消息头在第一个模块调用第二个模块的时候会重构请求,这个请求是没有消息头,导致第一个请求的消息头到第二个模块会丢失

解决方案:
使用请求拦截器 保存第一个请求的 headers
@Component
public class FeignAuthRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
ServletRequestAttributes servletRequestAttributes= (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
if(servletRequestAttributes!=null){
HttpServletRequest request = servletRequestAttributes.getRequest();
Enumeration<String> headerNames = request.getHeaderNames();
if(headerNames!=null){
while(headerNames.hasMoreElements()){
String name = headerNames.nextElement();
String header= request.getHeader(name);
templa

本文分析了在Spring Cloud Feign服务间调用时消息头丢失的原因,主要是由于请求重构导致。解决方案是通过实现请求拦截器来保存并传递原始请求的headers。在Feign的隔离策略为THREAD时,由于无法直接获取ThreadLocal中的request对象,可能需要自定义隔离策略以确保headers的正确传递。
最低0.47元/天 解锁文章
2444





