微服务如何通过feign.RequestInterceptor传递参数
作者:冲奶粉的奶爸 发布时间:2022-02-26 00:28:20
微服务通过feign.RequestInterceptor传递参数
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");
}
feign的 * RequestInterceptor
SpringCloud的微服务使用Feign进行服务间调用的时候可以使用RequestInterceptor统一拦截请求来完成设置header等相关请求,但RequestInterceptor和ClientHttpRequestInterceptor有点不同,它拿不到原本的请求,所以要通过其他方法来获取原本的请求
首先创建自定义的RequestInterceptor
这里通过RequestContextHolder获取到当前的request
@Slf4j
@Component
public class MyFeignInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
log.info("===request: {}", template.url());
template.header("aaaa", "bbbb");
}
}
然后定义一个feign的接口类
@FeignClient(name = "SPRING-CLOUD-CLIENT-DEMO")
public interface ClientFeign {
@GetMapping("/demo/get")
String weight(@RequestParam String param);
}
再创建一个controller
@Slf4j
@RestController
@RequestMapping("/interceptor")
public class InterceptorController {
@Autowired
private ClientFeign clientFeign;
@GetMapping("/feign")
public String feign(@RequestParam String param) {
return clientFeign.weight(param);
}
}
运行程序测试一下接口
查看程序打印
可以看到进入了我们自定义的RequestInterceptor
INFO 25936 --- [ctor-http-nio-3] c.m.d.g.interceptor.MyFeignInterceptor : ===request: /demo/weight?param=a
再查看feign调用的程序日志,可以看到设置的header信息
INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController : aaaa: a
INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController : websession: ECF4D97D02EEAFDDA3C15A7F1F050F61
INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController : header: aaaa, bbbb
INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController : header: accept, */*
INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController : header: user-agent, Java/1.8.0_191
INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController : header: host, 39.108.15.147:8801
INFO 1 --- [nio-8801-exec-6] c.m.d.client.controller.DemoController : header: connection, keep-alive
来源:https://blog.csdn.net/qq_32258777/article/details/102837238


猜你喜欢
- 本文在实现雪花效果的基础上,根据漫天飞舞雪花,实现下雨天场景的效果,使用eclipse android 版本,具体内容如下雪花效果图:具体代
- 1. 插入排序步骤:1.从第一个元素开始,该元素可以认为已经被排序2.取下一个元素tem,从已排序的元素序列从后往前扫描3.如果该元素大于t
- 本文实例为大家分享了Unity shader实现自由放大缩小效果的具体代码,供大家参考,具体内容如下代码:以下实现的shader代码:Sha
- 官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-a
- 一.抽象类(一)概念 在继承的层次结构中,每个新的子类都使类变得更加明确和具体。如果从一个子类向父类
- 概念优先级队列是一种先进先出(FIFO)的数据结构,与队列不同的是,操作的数据带有优先级,通俗的讲就是可以比较大小,在出队列的时候往往需要优
- 如下就可以获取button中的文本内容using System.Collections.Generic;using UnityEngine;
- Java中的final关键字1、修饰类的成员变量 这是final的主要用途之一,和C/C++的const,即该成员被修饰为常量,意味着不可修
- 本文介绍了springcloud Feign的Hystrix支持,分享给大家,具体如下:一、Feign client中加入Hystrix的f
- 本文实例为大家分享了JavaWeb实现简单文件上传的具体代码,供大家参考,具体内容如下1.概述通常浏览器上传的所有参数,我们可以通过requ
- 本文实例讲述了C#正则表达式匹配与替换字符串功能。分享给大家供大家参考,具体如下:事例一:\w+=>[A-Za-z1-9_],\s+=
- 概述背景函数式编程的理论基础是阿隆佐·丘奇(Alonzo Church)于 1930 年代提出的 &lambd
- 本文实例讲述了C#获取路径的几种方式。分享给大家供大家参考。具体如下:string str1 =Process.GetCurrentProc
- 1 环境部署1.1 jdk-8u111-windows-x64环境变量 JAVA_HOME:C:\Program Files\Java\jd
- RecyclerView上拉加载,先看效果:网上有很多这类得框架,不过在自己的项目只用到上拉加载的功能,所以自己封装一个简单点的。主要依赖B
- 基于Java的简单的企业员工管理系统,供大家参考,具体内容如下首先创建了一个员工类定义员工应有的属性:工号、姓名、性别、职位、年龄、工资、部
- 一、基本概念Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intrane
- HashTable和HashMap区别第一,继承的父类不同。Hashtable继承自Dictionary类,而HashMap继承自Abstr
- 关于 swagger 本文不再赘述,网上文章很多。本文要讲的是Knife4j3.0.3 整合SpringBoot 2.6.4,因为 knif
- 在项目里,我需要做一个Spring Boot结合Thymeleaf前端模版,结合JPA实现分页的演示效果。做的时候发现有些问题,也查了现有网