feign下游转发header信息

576 阅读1分钟

描述

微服务中,使用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);
            }
        }

    }

}