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

2024-05-16 05:28

本文主要是介绍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();
}

这篇关于OpenFeign替代品:Spring6 新增的http exchange 如何设置拦截器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994002

相关文章

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2