SpringBoot常用拦截器之ClientHttpRequestInterceptor

一、SpringBoot常用拦截器

下面3种拦截器,都是http拦截器,在处理业务逻辑之前对http请求信息进行处理,比如获取请求头,请求参数,设置请求头,请求参数等等

思路清晰,先说jar包:

HandlerInterceptor>spring-webmvc项目,org.springframework.web.servlet.HandlerInterceptor
ClientHttpRequestInterceptor>spring-web项目,org.springframework.http.client.ClientHttpRequestInterceptor
RequestInterceptor>feign-core项目,feign.RequestInterceptor

一目了然,从项目名称和包路径可以看出,3个拦截器分别属于3个不同的项目,所以他们之前的作用也有区别,在这里我大概讲一下3个拦截器的基本应用和区别:

3个拦截器的共同点,都是对http请求进行拦截,但是http请求的来源不同:

HandlerInterceptor是最常规的,其拦截的http请求是来自于客户端浏览器之类的,是最常见的http请求拦截器;
ClientHttpRequestInterceptor是对RestTemplate的请求进行拦截的,在项目中直接使用restTemplate.getForObject的时候,会对这种请求进行拦截,经常被称为:RestTempalte拦截器或者Ribbon拦截器;
RequestInterceptor常被称为是Feign拦截器,由于Feign调用底层实际上还是http调用,因此也是一个http拦截器,在项目中使用Feign调用的时候,可以使用此拦截器;

ClientHttpRequestInterceptor

ClientHttpRequestInterceptor是一个接口,用于在发送HTTP请求之前或之后拦截请求并进行修改。它可以用于添加、修改或删除请求头、请求参数、请求体等内容,以及在请求完成后处理响应。使用ClientHttpRequestInterceptor可以方便地实现一些常见的功能,例如:

1. 添加认证信息:在每个请求中添加认证信息,例如token或用户名密码。2. 添加请求头:在每个请求中添加自定义的请求头,例如User-AgentReferer等。3. 修改请求参数:在发送请求之前修改请求参数,例如添加时间戳、签名等。4. 处理响应:在请求完成后处理响应,例如解析响应体、记录日志等。

使用ClientHttpRequestInterceptor需要实现其中的intercept方法,该方法接收两个参数:ClientHttpRequest和byte[],前者表示当前的请求对象,后者表示请求体的字节数组。在intercept方法中可以对请求进行修改,例如添加请求头、修改请求体等。修改后的请求会继续传递给下一个拦截器或发送到服务端。对于响应的处理可以使用ResponseExtractor或自定义的响应处理器。

示例代码:

import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;import java.io.IOException;public class MyInterceptor implements ClientHttpRequestInterceptor {@Overridepublic ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {// 在请求发送之前,对请求进行修改或添加一些额外的信息request.getHeaders().add("Authorization", "Bearer token123");// 执行请求ClientHttpResponse response = execution.execute(request, body);// 在请求发送之后,对响应进行修改或添加一些额外的信息response.getHeaders().add("Cache-Control", "no-cache");return response;}
}

在上面的示例中,我们实现了ClientHttpRequestInterceptor接口,并重写了intercept方法。在这个方法中,我们首先对请求添加了一个名为Authorization的请求头,然后通过ClientHttpRequestExecution对象的execute方法执行了请求,并得到了响应。最后,我们又对响应添加了一个名为Cache-Control的响应头,并返回了响应。

要使用这个拦截器,可以将它注册到RestTemplate中,如下所示:

import org.springframework.web.client.RestTemplate;public class MyClient {public static void main(String[] args) {RestTemplate restTemplate = new RestTemplate();restTemplate.getInterceptors().add(new MyInterceptor());// 发送HTTP请求String result = restTemplate.getForObject("http://example.com/api", String.class);System.out.println(result);}
}

在上面的示例中,我们创建了一个RestTemplate对象,并将MyInterceptor拦截器添加到了它的拦截器列表中。然后,我们使用RestTemplate对象发送了一个HTTP GET请求,并打印了响应结果。

总结:

ClientHttpRequestInterceptor是Spring框架中的一个拦截器接口,用于拦截客户端发出的HTTP请求。通过实现这个接口,并将拦截器注册到RestTemplate中,可以对请求进行修改或添加一些额外的信息。

参考博客:https://blog.csdn.net/weixin_41979002/article/details/124778961

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

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

相关文章

如何用ChatGPT快速写出一份合格的PPT报告

我们【AI写稿专家】的小伙伴中有很多企业高管和公务员,大家经常有写报告写ppt的需求,下面小编给大家介绍一下我们新发布生成PPT的功能,很简单很方便,看完大家不到1分钟就能生成一份拿得出手的PPT报告,再也不用费尽心思…

摩托车不按规定行驶最右侧车道,发生事故恐担责

《道路交通安全法实施条例》第四十四条规定: 在道路同方向划有2条以上机动车道的,左侧为快速车道,右侧为慢速车道。在快速车道行驶的机动车应当按照快速车道规定的速度行驶,未达到快速车道规定的行驶速度的,应当在慢速…

Python ❀ 案例 - 乘法表

打印99乘法表 # 正向排序 def zhengxv(num:int):for i in range(1,num1):for j in range(1,i1):if j*i > 9:print("{}x{}{}".format(j, i, j*i),end" ")else:print("{}x{}{} ".format(j, i, j * i), end" ")print(end"\n"…

NR和4K NR

NR(Noise Reduction)是电视产品中的一种令噪声降噪功能。它是电视产品图像处理中的重要算法之一。 NR主要起以下作用: 1. 去除画面的噪声点。能识别并去除画面的各种随机噪点,如电视信号干扰或者模拟转数字时产生的噪音。 2. 消除模糊带。能去除数字信号频道转换时产生的模糊…

【设计模式】第25节:行为型模式之“访问者模式”

一、简介 访问者模式允许一个或者多个操作应用到一组对象上,设计意图是解耦操作和对象本身,保持类职责单一、满足开闭原则以及应对代码的复杂性。 二、优点 分离操作和数据结构增加新操作更容易集中化操作 三、适用场景 数据结构稳定,操…

私有网络的安全保障,WorkPlus Meet内网视频会议助力企业高效会议

在企业内部沟通与协作中,视频会议成为了一种必不可少的沟通方式。然而,传统的互联网视频会议往往受制于网络不稳定因素,给企业带来不便与困扰。WorkPlus Meet作为一款专注内网视频会议的软件,致力于为企业打造高效、稳定的内网视频…

NLP实践——中文指代消解方案

NLP实践——中文指代消解方案 1. 参考项目2. 数据2.1 生成conll格式2.2 生成jsonline格式 3. 训练3.1 实例化模型3.2 读取数据3.3 评估方法3.4 训练方法 4. 推理5. 总结 1. 参考项目 关于指代消解任务,有很多开源的项目和工具可以借鉴,比如spacy的基础模…

JVM虚拟机:堆、栈、方法区的关系

本文重点 在计算机科学领域,Java虚拟机(JVM)是一个关键的概念。它是Java语言的核心,也是其他基于Java的编程语言的基础。JVM的核心组成部分包括堆、栈和方法区。这些组成部分之间的关系非常重要,因为它们共同构成了程序执行的基础。 堆:存储对象的天堂 堆是JVM中最大的…

k近邻方法处理有序型因子、无序型因子

k近邻方法处理有序型因子、无序型因子以及自己如何使用.C函数和.Call函数调用C语言 问题读源码分享有序因子和无序因子的处理有序因子的标准化问题 实现k近邻的程序包有很多:class、kknn等,但是kknn包实现了处理有序型因子和无序型因子,下面我将具体的处理方式展现给大家。…

KNN模型

使用K-Nearest Neighbors (KNN)算法进行分类。首先加载一个数据集,然后进行预处理,选择最佳的K值,并训练一个KNN模型。 # encodingutf-8 import numpy as np datas np.loadtxt(datingTestSet2.txt) # 加载数据集,返回一个numpy数…

html获取网络数据,列表展示 第二种

html获取网络数据&#xff0c;列表展示 第二种 js遍历json数组中的json对象 image.png || - 判断数据是否为空&#xff0c;为空就显示 - <!DOCTYPE html> <html><head><meta charset"utf-8"><title>网页列表</title><script …

Java作业一

编写程序实现如下界面效果&#xff1a; import java.util.Scanner;public class Test01 {public static void main(String[] args) {String name;Scanner input new Scanner(System.in);System.out.println("请输入您的姓名&#xff1a;");name input.nextLine();S…

viewfs://为Hadoop 中的一个特殊文件系统

解释 viewfs:// 是 Hadoop 中的一个特殊文件系统 URI&#xff0c;用于访问 Hadoop 的视图文件系统&#xff08;ViewFS&#xff09;。 ViewFS 是 Hadoop 提供的一种虚拟文件系统&#xff0c;它可以将来自多个底层文件系统的文件统一管理和访问。 通过 ViewFS&#xff0c;你可…

程序设计与算法(二)算法基础(北京大学MOOC)

一、枚举 1、完美立方 /* 完美立方a^3b^3c^3d^3// a大于b c d// b<c<d*/ #include <iostream> int main() {int a,b,c,d; int N 24;//scanf("%d", &N );for(a2; a<N; a ) //a的范围 [2,N]{for(b2; b<a; b){ //b的范围[2…

点云从入门到精通技术详解100篇-基于 3D 视觉信息的机械手抓取机械零部件

目录 前言 相关技术的国内外发展现状 点云配准 点云分割 点云位姿估计

R2R 的一些小tip

批次间控制器(Run-to-run Controller)&#xff0c;以应对高混合生产的挑战。将最优配方参数与各种工业特征相关联的模型是根据历史数据离线训练的。预测的最优配方参数在线用于调整工艺条件。 批次控制(R2R control)是一种先进的工艺控制技术&#xff0c;可在运行(如批次或晶圆…

HTML+CSS+JS实现计算器

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

KnowledgeGPT:利用检索和存储访问知识库上增强大型语言模型10.30

利用检索和存储访问知识库上增强大型语言模型 摘要引言2 相关研究3方法3.1 任务定义3.2 知识检索3.2.1 代码实现3.2.2 实体链接3.2.3 获取实体信息3.2.4 查找实体或值3.2.5 查找关系 3.3 知识存储 4 实验 摘要 大型语言模型&#xff08;LLM&#xff09;在自然语言处理领域展现…

Java面试基础

一、和equals 在Java中&#xff0c;使用字符串常量"a"可以直接创建一个字符串对象&#xff0c;因为Java会将所有的字符串常量都保存在一个字符串常量池中&#xff0c;如果使用相同的字符串常量创建字符串对象&#xff0c;则会指向同一个对象&#xff0c;这样就可以避…

不同源安装nginx

Nginx是一款高性能的Web服务器软件。在安装Nginx时&#xff0c;可以选择不同的安装源。 1.官方源&#xff1a;在官方网站下载Nginx的源代码&#xff0c;然后进行编译安装。 2.EPEL源&#xff1a;EPEL (Extra Packages for Enterprise Linux)源是针对Red Hat、CentOS、Scienti…