当前位置: 首页 > news >正文

HTTP请求拦截器链

文章目录

  • HTTP请求拦截器链
    • 需求定义
    • 写一个Controller方法接口
    • 写三个http请求拦截器
    • 把拦截器加入到配置中,并且配置拦截规则
    • 在postman里面发送请求,看下测试结果是否正确

HTTP请求拦截器链

需求定义

我们写一个包含三个HTTP请求拦截器的拦截器链,写一个controller控制器方法,最后在postman里面调用controller控制器里面的接口方法,看看这个请求的经过路径。
首先说结论,如下图:
在这里插入图片描述

写一个Controller方法接口

如下图:
在这里插入图片描述

写三个http请求拦截器

我们定义三个http请求拦截器如下图:
在这里插入图片描述
然后每个http请求拦截器都实现preHandle、postHandle、afterCompletion这三个方法,如下图:
在这里插入图片描述

preHandle、postHandle、afterCompletion方法的执行时机?
当一个http请求发过来的时候,如果没有http请求拦截器这个请求是会直接发送到Controller控制器里面的,但是如果有http请求拦截器的话,外部发来的http请求会先进入到拦截器中拦截。可能我们程序中有多个http请求拦截器,比如有三个http请求拦截器,那么这三个http请求拦截器会组成一个拦截器链,外部发来的http请求先进入第一个拦截器的preHandle方法,如果这个拦截器放行了,也就是preHandle方法返回了true,那么该请求就会被第一个拦截器放行,然后该请求会进入到拦截器链中的第一个拦截器中,同样是进入到preHandle方法当中,如果preHandle方法返回true,则同样放行;接着http请求进入到第三个拦截器的preHandle方法里面;最后该请求才会进入到controller控制器中执行。注意如果preHandle方法返回false,则该请求就不能传递到controller控制器中了。

执行完controller方法之后,该http请求就算是执行完毕了,接着会从拦截器链中倒着走出去,先走拦截器3的postHandle方法,再走拦截器2的postHandle方法,最后再走拦截器1的postHandle方法;
走完了postHandle方法之后,再走拦截器3的afterCompletion方法,再走拦截器2的afterCompletion方法,最后走拦截器1的afterCompletion方法;

这样就执行完了一个http请求的全部过程,流程图如下图:
在这里插入图片描述

把拦截器加入到配置中,并且配置拦截规则

我们需要写一个拦截器配置类,把需要用到的拦截器放到拦截器链中,并且配置每个拦截器拦截的http请求的规则,就是拦截什么样的http请求,比如只拦截/user的请求,或者只拦截/student的请求,具体是什么样的请求规则,我们可以自定义。拦截器配置类如下图:
在这里插入图片描述
可以看到我们这里把拦截器1、拦截器2、拦截器3全部都放到了拦截器链中,然后每个拦截器都是拦截所有的http请求。

在postman里面发送请求,看下测试结果是否正确

首先看下我们控制器里面接收请求的方法,如下图:
在这里插入图片描述

然后在postman里面发送一个/test请求,如下图:
在这里插入图片描述
可以看到我们的controller控制器里面的方法确实成功执行了,接着去看下在执行controller控制器方法之前,三个拦截器里面的preHandle方法是否执行了,以及在执行controller控制器方法之后,三个拦截器里面的postHandle方法和afterCompletion方法是否执行了,控制台输出信息如下图:
在这里插入图片描述
可以发现这里在执行Controller控制器之前确实执行了拦截器中的preHandle方法,以及在执行Controller控制器之后也确实执行了拦截器中的postHandle和afterCompletion方法,并且顺序也是正确的。

http://www.lryc.cn/news/355937.html

相关文章:

  • 再创佳绩丨达梦数据库一体机荣获2024数字中国创新大赛·信创赛道总决赛一等奖
  • 数据分析之统计学基础
  • Web3 游戏周报(5.19 - 5.25)
  • 通过el-tree自定义渲染网页版工作目录,实现鼠标悬浮显示完整名称、用icon区分文件和文件夹等需求
  • C语言 | Leetcode C语言题解之第101题对称二叉树
  • TTime:截图翻译/OCR
  • 【哈希】闭散列的线性探测和开散列的哈希桶解决哈希冲突(C++两种方法模拟实现哈希表)(1)
  • 四川农业大学Java实训项目圆满收官,汇智知了堂引领学子实践创新
  • JavaScript的当前时间设置及Date的运算
  • 网络安全管理制度
  • 零基础,想做一名网络安全工程师,该怎么学习?
  • 【大模型部署】在C# Winform中使用文心一言ERNIE-3.5 4K 聊天模型
  • 【Unity】Unity项目转抖音小游戏(三)资源分包,抖音云CDN
  • SQLite查询优化
  • UE4编辑器End键Actor贴近地面
  • 2024儿科常用心理评估量表汇总,附详细操作步骤与评定标准
  • Python 脚本化 Git 操作:简单、高效、无压力
  • 手搓顺序表(C语言)
  • 一文搞懂oracle事务提交以及脏数据落盘的原则
  • OceanBase:列存储
  • Rust:WIndows 环境下交叉编译 Linux 平台程序
  • 从零学爬虫:使用比如说说解析网页结构
  • C#数据类型变量、常量
  • Java高级面试问题及答案
  • 出现 Transaction rolled back because it has been marked as rollback-only 解决方法
  • 数据结构算法题day03
  • 深入分析C#中的“编写器”概念——代码修改、注解与重构
  • uview1.0 u-form表单回显校验不通过
  • 监控员工电脑的软件有哪些,不得不说这几款电脑监控软件太好用了
  • 【MySQL精通之路】索引优化(2)