springboot feign 攔截器 RequestInterceptor,攔截feign請求
spring boot 版本 2.2.2.RELEASE
spring cloud版本 Hoxton.SR1
攔截feign的請求
package cn.zhangfusheng.base.feign.interceptor;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
/**
* @author fusheng.zhang
* @Description feign 攔截器
* @create 2020-04-16 11:04:00
*/
@Slf4j
@Component
public class FeignRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
try {
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
HttpServletRequest httpServletRequest = servletRequestAttributes.getRequest();
Enumeration<String> headerNames = httpServletRequest.getHeaderNames();
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
template.header(name, httpServletRequest.getHeader(name));
}
} catch (Exception e) {
log.error("服務之間的調用,處理請求頭髮生異常:{}", e.getMessage(), e);
}
}
}