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

相关文章

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

电脑密码怎么设置? 一文读懂电脑密码的详细指南

《电脑密码怎么设置?一文读懂电脑密码的详细指南》为了保护个人隐私和数据安全,设置电脑密码显得尤为重要,那么,如何在电脑上设置密码呢?详细请看下文介绍... 设置电脑密码是保护个人隐私、数据安全以及系统安全的重要措施,下面以Windows 11系统为例,跟大家分享一下设置电脑密码的具体办php法。Windo

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

Kafka拦截器的神奇操作方法

《Kafka拦截器的神奇操作方法》Kafka拦截器是一种强大的机制,用于在消息发送和接收过程中插入自定义逻辑,它们可以用于消息定制、日志记录、监控、业务逻辑集成、性能统计和异常处理等,本文介绍Kafk... 目录前言拦截器的基本概念Kafka 拦截器的定义和基本原理:拦截器是 Kafka 消息传递的不可或缺

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2