微服务框架中@FeignClient远程调用,请求无法携带问题处理
此架构是在若依框架 基础上进行处理,使用 @FeignClient 进行远程调用,发现无法携带请求头信息,
此模块只进行处理,不进行分析原因
解决方式如下
1、添加请求拦截器
代码如下
import feign.RequestInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;@Configuration
public class FeignConfig {@Beanpublic RequestInterceptor requestInterceptor() {return requestTemplate -> {// 1、从RequestContextHolder获取原始请求的请求数据(请求参数、请求头等)ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();HttpServletRequest request = attributes.getRequest();// 2、同步请求头数据Enumeration<String> headerNames = request.getHeaderNames();if (headerNames != null) {while (headerNames.hasMoreElements()) {String name = headerNames.nextElement();String values = request.getHeader(name);// 跳过 content-length,没有跳过会导致请求参数无法接收if ("Content-Length".equalsIgnoreCase(name)) {continue;}requestTemplate.header(name, values);}}};}}
2、使用
api 接口 模块中,配置的 远程调用如下
其中配置了
configuration = FeignConfig.class
这个FeignConfig中就是请求拦截器,会在远程调用时候进行处理请求