OpenFeign 远程调用时携带请求头参数

在微服务开发过程中必不可免的使用远程调用工具,这里以OpenFeign为例来解决跨服务调用时如何携带参数。

其实办法很简单,我们只需要自定义一个拦截器实现Feign 提供的RequestInterceptor接口,使用Spring 提供的RequestContextHolder工具类来获取当前请求的对象,然后从请求对象中获取需要的请求头信息即可,代码如下:

import feign.RequestInterceptor;
import feign.RequestTemplate;
import jakarta.servlet.http.HttpServletRequest;
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;

@Component
public class FeignInterceptor implements RequestInterceptor {

    public void apply(RequestTemplate requestTemplate){
        // 从当前线程获取请求上下文对象
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
        if(null != requestAttributes) {
            ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)requestAttributes;
            HttpServletRequest request = servletRequestAttributes.getRequest();
            // 从当前对象中获取请求头中的token
            String token = request.getHeader("token");
            // 将获取到的token加入到请求模板中
            requestTemplate.header("token", token);
        }
    }
}
posted @ 2024-10-08 10:07  异形_CherryShen  阅读(493)  评论(0)    收藏  举报