package cn.cloudwalk.elevator; import cn.cloudwalk.cloud.context.CloudwalkSessionContextHolder; import cn.cloudwalk.cloud.context.CloudwalkSessionObject; import cn.cloudwalk.elevator.config.FeignThreadLocalUtil; import feign.RequestInterceptor; import feign.RequestTemplate; import java.util.Collection; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @Configuration public class AcsFeignConfiguration implements RequestInterceptor { protected final Logger logger = LoggerFactory.getLogger(AcsFeignConfiguration.class); @Autowired private CloudwalkSessionContextHolder cloudwalkSessionContextHolder; public void apply(RequestTemplate requestTemplate) { Map map = FeignThreadLocalUtil.get(); if (map != null && !map.isEmpty()) { requestTemplate.header("platformuserid", new String[] {map.get("platformuserid")}); requestTemplate.header("loginid", new String[] {map.get("loginid")}); requestTemplate.header("businessid", new String[] {map.get("businessid")}); requestTemplate.header("username", new String[] {map.get("username")}); requestTemplate.header("applicationid", new String[] {map.get("applicationid")}); requestTemplate.header("authorization", new String[] {map.get("authorization")}); this.logger.info("feign调用配置header参数, businessId={}, threadId={}", requestTemplate.headers().get("businessid"), Long.valueOf(Thread.currentThread().getId())); } else { Map> headerMap = requestTemplate.headers(); ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); if (null != attributes) { HttpServletRequest request = attributes.getRequest(); if (!headerMap.containsKey("platformuserid")) { requestTemplate.header("platformuserid", new String[] {request.getHeader("platformuserid")}); } if (!headerMap.containsKey("loginid")) { requestTemplate.header("loginid", new String[] {request.getHeader("loginid")}); } if (!headerMap.containsKey("businessid")) { requestTemplate.header("businessid", new String[] {request.getHeader("businessid")}); } if (!headerMap.containsKey("username")) { requestTemplate.header("username", new String[] {request.getHeader("username")}); } if (!headerMap.containsKey("applicationid")) { requestTemplate.header("applicationid", new String[] {request.getHeader("applicationid")}); } if (!headerMap.containsKey("authorization")) { requestTemplate.header("authorization", new String[] {request.getHeader("authorization")}); } CloudwalkSessionObject session = this.cloudwalkSessionContextHolder.getSession(); if (StringUtils.isBlank(request.getHeader("businessid")) && session != null) { requestTemplate.header("businessid", new String[] {session.getCompany().getCompanyId()}); } if (StringUtils.isBlank(request.getHeader("applicationid")) && session != null) requestTemplate.header("applicationid", new String[] {session.getApplicationId()}); } } } }