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

相关文章

Java实现为PDF设置背景色和背景图片

《Java实现为PDF设置背景色和背景图片》在日常的文档处理中,PDF格式因其稳定性和跨平台兼容性而广受欢迎,本文将深入探讨如何利用Spire.PDFforJava库,以简洁高效的方式为你的PDF文档... 目录库介绍与安装步骤Java 给 PDF 设置背景颜色Java 给 PDF 设置背景图片总结在日常的

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Java利用Spire.XLS for Java设置Excel表格边框

《Java利用Spire.XLSforJava设置Excel表格边框》在日常的业务报表和数据处理中,Excel表格的美观性和可读性至关重要,本文将深入探讨如何利用Spire.XLSforJava库... 目录Spire.XLS for Java 简介与安装Maven 依赖配置手动安装 JAR 包核心API介

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

spring AMQP代码生成rabbitmq的exchange and queue教程

《springAMQP代码生成rabbitmq的exchangeandqueue教程》使用SpringAMQP代码直接创建RabbitMQexchange和queue,并确保绑定关系自动成立,简... 目录spring AMQP代码生成rabbitmq的exchange and 编程queue执行结果总结s