微服务通过feign.RequestInterceptor传递参数

博客介绍了Feign支持请求拦截器,可在发送请求前操作请求模板,如设置请求头。自定义请求拦截器需实现feign.RequestInterceptor接口,通过其apply方法的RequestTemplate参数调整请求信息。还给出创建自定义拦截器进行身份校验的示例,以及服务端获取参数的逻辑,实现微服务间参数传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Feign 支持请求拦截器,在发送请求前,可以对发送的模板进行操作,例如设置请求头等属性,自定请求拦截器需要实现 feign.RequestInterceptor 接口,该接口的方法 apply 有参数 template ,该参数类型为 RequestTemplate,我们可以根据实际情况对请求信息进行调整,示例如下:

  • 创建自定义请求拦截器,在发送请求前增加了一个请求头信息,进行身份校验。

具体代码参考如下:

import feign.RequestInterceptor;

import feign.RequestTemplate;

   

public class MyRequestInterceptor implements RequestInterceptor{

   

public void apply(RequestTemplatetemplate){

template.header("Authorization","123");

}

}

 服务端可以通过HttpServletRequest获取到前面传递的参数,具体获取逻辑如下:

 RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
        if (requestAttributes != null) {
            HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
            request.getHeader("Authorization");
        }

 就实现了各个微服务之间参数的传递。 

转载于:https://www.cnblogs.com/baizhanshi/p/10913590.html

微服务架构中,如果使用Feign来进行服务间的通信,并且希望在调用链路中传递MDC(Mapped Diagnostic Context),可以按照以下步骤进行配置: 1. 配置FeignRequestInterceptor:通过实现FeignRequestInterceptor接口,可以在请求被发送之前拦截请求并修改请求的头部信息。在这个拦截器中,你可以将MDC的数据添加到请求头中。 ```java public class MDCFeignRequestInterceptor implements RequestInterceptor { @Override public void apply(RequestTemplate template) { // 获取MDC的数据并添加到请求头 template.header("X-MDC-Data", MDC.getCopyOfContextMap().toString()); } } ``` 2. 注册MDCFeignRequestInterceptor:将上述的拦截器注册到Feign客户端中。 ```java @Configuration public class FeignConfig { @Bean public MDCFeignRequestInterceptor mdcFeignRequestInterceptor() { return new MDCFeignRequestInterceptor(); } @Bean public feign.RequestInterceptor requestInterceptor() { return mdcFeignRequestInterceptor(); } } ``` 3. 在服务调用的地方使用@FeignClient注解指定feign.RequestInterceptor的Bean。 ```java @FeignClient(name = "service-name", configuration = FeignConfig.class) public interface MyFeignClient { // Feign接口定义 } ``` 通过以上配置,MDC的数据就会被传递Feign请求的头部中。在服务提供方接收到请求后,可以从请求头中获取MDC的数据,并将其设置到MDC中,以保证在服务提供方的日志中能够正确地记录MDC的相关信息。 当然,在使用上述方法传递MDC时,需要确保各个微服务的日志框架都支持MDC,并且在日志输出时正确地处理MDC的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值