OpenFeign替代品:Spring6 新增的http exchange 如何设置拦截器

前言

OpenFeign已经被认为是功能完备了,后续不再更新新功能,新出来的 http exchange 可以实现类似的功能。
在使用Openfeign的时候,我们通常会使用它的拦截器来实现认证token的填写等统一处理,那么,在使用Http exchange的时候,该怎么实现类似的功能呢?

方案

先说结论,HTTP Exchange本身不具备设置拦截器的功能,但是,要使用Http exchange需要设置一个底层使用的client,通常会设置成RestClient或者RestTemplate,而RestClient或者RestTemplate是具备设置拦截器的功能的,所以,我们将拦截器设置到cliet上,再使用client生成HTTP Exchange的HttpServiceProxyFactory,就可以达成目标了。
下面以RestClient为例,演示一个设置认证token拦截器的功能。

首先,我们需要定义一个拦截器,RestClient支持多种拦截器,比如 请求发送前: ClientHttpRequestInitializer, 请求发送拦截器: ClientHttpRequestInterceptor等,具体可以查看 RestClient.Builder,里面有很多的拦截器可以设置。
我们的拦截器是在发送前将认证header添加到request上,代码如下:

import jakarta.annotation.Nonnull;
import org.springframework.http.client.ClientHttpRequest;
import org.springframework.http.client.ClientHttpRequestInitializer;
import org.springframework.stereotype.Component;// 注意,这里可以是bean的方式,用于后面的注入,也可以是直接new,没有限制。用bean的模式是为了方便使用其他的service@Component
public class MyRequestInterceptor implements ClientHttpRequestInitializer {@Overridepublic void initialize(@Nonnull ClientHttpRequest request) {// 模拟获取tokenString token = "xxx";request.getHeaders().add("x-auth-token", token);}
}

然后,我们声明RestClientHttpServiceProxyFactory

/*** @author */
@Configuration
public class HttpExchangeAutoConfig {// 直接用 List<ClientHttpRequestInitializer> 自动注入了所有的拦截器,也可以自己去new一些,不用自动注入@Beanpublic HttpServiceProxyFactory httpServiceProxyFactory(RestTemplate restTemplate, @Autowired(required = false) List<ClientHttpRequestInitializer> requestInitializers) {// http client默认配置,需要更多配置就自己自定义。HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();var builder = RestClient.builder().requestFactory(factory);for (ClientHttpRequestInitializer requestInitializer : requestInitializers) {builder.requestInitializer(requestInitializer);}RestClientAdapter adapter1 = RestClientAdapter.create(builder.build());return HttpServiceProxyFactory.builderFor(adapter1).build();}
}

有了HttpServiceProxyFactory,后面我们就直接用它创建service的client并使用了:

@Resource
private HttpServiceProxyFactory factory;xxxFunc(){XXXXApi xxxApi = factory.createClient(XXXXApi.class);xxxApi.xxx();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/838342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MY SQL 实验四:

一、实验目的 通过该实验掌握较复杂的SQL 查询数据库方法&#xff0c;包括嵌套查询&#xff0c;相关与不相关子查询&#xff0c;连接的多种方法等。 二、实验原理 数据库查询是数据库的核心操作。SQL语言提供了SELECT语句进行数据库的查询。 SELECT[ALL|DISTINCT]<目标列表达…

enable_shared_from_this 实现原理

前言 enable_shared_from_this 可以帮助我们用 this 指针安全地创建 shared_ptr。 enable_shared_from_this 假设我们的程序使用 shared_ptr 管理 Widget 对象&#xff0c;我们用一个 vector 来记录已经处理过的 Widget 对象&#xff1a; std::vector<std::shared_ptr&l…

OSError: [WinError 1455] 页面文件太小,无法完成操作 的问题

实质问题是报错&#xff1a;caffe2_detectron_ops.dll“ or one of its dependencies 还需要安装一个包&#xff1a; pip install intel-openmp 安装之后顺利测试通过。

使用可接受gitlab参数的插件配置webhook

jenkins配置 安装Generic Webhook Trigger 配置远程触发令牌 勾选Print post content和Print contributed variables用于打印值 配置gitlab 选择新增webhook 配置webhook http://JENKINS_URL/generic-webhook-trigger/invoke,将JENKINS_URL修改成自己的jenkins地址 先保存…

【考研数学】准备开强化,更「张宇」还是「武忠祥」?

数一125学长前来回答&#xff0c;选择哪位老师的课程&#xff0c;这通常取决于你的个人偏好和学习风格&#xff01; 张宇老师和武忠祥老师都是非常有经验的数学老师&#xff0c;他们的教学方法各有特点。 张宇老师的教学风格通常被认为是通俗易懂&#xff0c;善于将复杂的概念…

【JS】基于原生JavaScript的大文件切片上传及断点续传实现

基于原生JavaScript的大文件切片上传及断点续传实现 在现代Web应用中,大文件上传是一个常见但具有挑战性的功能。随着文件大小的增加,如何高效可靠地上传文件至服务器成为亟待解决的问题。在本文中,我将介绍如何使用原生JavaScript实现大文件切片上传及断点续传功能。 为什…

嵌入式开发十四:按键输入实验

前面两个实验&#xff0c;我们介绍了 STM32F4 的 IO 口作为输出的使用&#xff0c;这一次&#xff0c;我们将向大家介绍如何使用 STM32F4 的 IO 口作为输入用。我们将利用板载的 4 个按键&#xff0c;来控制板载的两个 LED 的亮灭和蜂鸣器。通过本次的学习&#xff0c;你将了解…

C语言输出符

C语言输出符 以下是C语言中一些常用的格式化输出的格式控制符及其对应的数据类型&#xff1a; 格式控制符描述对应数据类型%d十进制有符号整数int%ld长整型long int%lld长长整型long long int%u十进制无符号整数unsigned int%lu无符号长整型unsigned long int%llu无符号长长整…

从独立开发者到成为SeaTunnel社区的贡献者,我做对了哪些事儿?

个人介绍 大家好&#xff0c;我是闫成雨&#xff0c;目前是一名独立开发者。专注于数据开发、机器学习、资源调度算法和分布式系统。 GitHub ID: CheneyYin 个人主页&#xff1a;https://cheneyyin.github.io/ 为社区做了哪些贡献 加强了Spark引擎和Flink引擎对SeaTunnel数据…

2024年最新软件测试面试题必问的1000题!

我了解的测试理论和方法包括以下几个方面&#xff1a; 黑盒测试与白盒测试&#xff1a; 黑盒测试&#xff1a;基于对软件系统外部行为进行测试&#xff0c;独立于内部代码实现细节。黑盒测试关注输入与输出之间的关系以及软件功能是否符合预期。白盒测试&#xff1a;基于对软件…

如何实现Linux双网卡同时连接内网和外网的配置?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

Day29

回溯算法part03 LC39组合总和(未掌握) 未掌握分析&#xff1a;被数组中的元素可以被重复选取误导&#xff0c;同时没有想到暴力解法来理解回溯 暴力解法肯定是for循环遍历candidates中的每个元素&#xff0c;下一层子循环不像之前的组合题目那样从i1开始&#xff0c;该题目元…

Linux系统 的持续学习

昨天学习了目录结构、补充命令和配置网络&#xff0c;其中配置网络用了nat方法&#xff0c;今天学习用桥接方法&#xff0c;通配符、正则表达式的一部分内容。 桥接模式 如果重网卡失败&#xff1a; 1.检查配置文件是否正确 2.检查虚拟器编辑器有没有选对&#xff08;网卡类…

jiebaNET中文分词器

最近我接手了一个有趣的需求&#xff0c;需要对用户评价进行分词&#xff0c;进行词频统计和情绪分析&#xff0c;并且根据词频权重制成词云图以供后台数据统计&#xff0c;于是我便引入了jieba分词器,但是我发现网上关于jiebaNET相关文档实在太少了&#xff0c;甚至连配置文件…

弘君资本:降准降息利好哪些板块?

降准是指下降存款准备金率&#xff0c;降息是指下调存款利率&#xff0c;他们是一种宽松的货币政策&#xff0c;对股市来说是一种利好&#xff0c;其间利好以下板块&#xff1a; 1、券商板块 降准降息会影响投资渠道的扩宽&#xff0c;降低资金入市的机会成本&#xff0c;将更…

CyclicBarrier的 常用场景及使用示例

CyclicBarrier的 常用场景及使用示例 CyclicBarrier是Java并发编程中的另一种同步辅助工具&#xff0c;它用于控制多个线程相互等待&#xff0c;直到所有线程都到达一个共同的屏障点&#xff0c;然后所有线程才会继续执行。与CountDownLatch不同的是&#xff0c;CyclicBarrier…

python的转义序列和占位符

1.占位符 1.%s&#xff1a;用于插入字符串 name "Alice" message "Hello, %s!" % name print(message) # 输出&#xff1a;Hello, Alice!%d&#xff1a;用于插入整数 age 25 message "I am %d years old." % age print(message) # 输出…

chrome命令的使用

Chrome浏览器&#xff0c;也称为Google Chrome&#xff0c;是由Google公司开发的一款设计现代、快速且安全的网页浏览器。Chrome浏览器基于开源的Chromium项目&#xff0c;并增加了Google自己的一些独特功能。Chrome浏览器以其简洁的界面、快速的浏览速度和丰富的扩展程序而广受…

Linux 文本编辑相关指令、指令参数、使用例子

一些常见的Linux文本编辑和处理相关的指令&#xff0c;以及它们的参数和使用例子&#xff0c;以表格形式列出&#xff1a; 序号指令名称指令参数及说明指令使用例子及说明1cat-n: 显示每行的行号cat -n filename 显示文件内容及行号2less-i: 交互模式&#xff0c;允许搜索less…

付费解锁隐藏动力和续航,订阅制又被特斯拉玩出花了

我们知道&#xff0c;「订阅制」早已成互联网领域各路大厂玩烂的操作。 上到程序订阅付费使用&#xff08;例如 Offics、Adobe&#xff09;&#xff0c;下到各类功能服务订阅&#xff08;如影视会员、网盘会员等&#xff09;。 甚至于某东、某宝等网购平台也整出了 VIP 订阅服…