package com.tanpu.community.config; import feign.RequestInterceptor; import feign.RequestTemplate; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.Collection; import java.util.Enumeration; import java.util.Map; /** * @description: 透传spring 头信息 * @author: wanglei * @created: 2020/05/08 11:55 */ @Slf4j @Component public class MyFeignInterceptor implements RequestInterceptor { @Override public void apply(RequestTemplate template) { HttpServletRequest request = getHttpServletRequest(); if (request != null) { Map<String, Collection<String>> feignHeaders = template.headers(); Enumeration<String> headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()) { String name = headerNames.nextElement(); // 不覆盖feign的头信息 if (!feignHeaders.containsKey(name) ) { // if (name.equalsIgnoreCase("uid") || name.equalsIgnoreCase("tamptoken")){ template.header(name, request.getHeader(name)); // } } } log.debug("添加后的头信息:{}", template.headers()); } else { log.debug("没有添加feign头信息"); } } /** * 如果不是从controller过来的请求(例如定时器等),是没有request对象的 */ private HttpServletRequest getHttpServletRequest() { try { return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); } catch (Exception e) { } return null; } }