描述
微服务中,使用feign进行http远程调用其他服务接口时,需要讲上游的请求头信息或者cookie信息带入到下游中。比如,用户token令牌,这个时候就可以实现RequestInterceptor接口,重写该实现类,将我们所需要的信息设置到下游服务中。
实现代码
/**
* feign远程调用,请求头下游转发
*
* @author: 苦瓜不苦
* @date: 2021/8/14 0:20
**/
@Component
public class FeignInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes == null) {
return;
}
HttpServletRequest request = attributes.getRequest();
// cookie
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
requestTemplate.header(cookie.getName(), cookie.getValue());
}
}
// header
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String value = request.getHeader(name);
// 便利请求头属性,转发到下游服务
requestTemplate.header(name, value);
}
}
}
}