SpringMVC 拦截器

文章目录

      • 1、拦截器的配置
      • 2、拦截器的三个抽象方法
      • 3、多个拦截器的执行顺序
      • 总结


在这里插入图片描述

在这里插入图片描述

Spring MVC 拦截器是Spring框架中的一种机制,用于在请求到达处理器之前和渲染视图之前拦截请求,并允许开发者在这两个时间点进行自定义的处理逻辑。拦截器与过滤器(Filter)类似,但更加专注于对请求的处理器的拦截,比如对访问权限进行控制、日志记录、性能监控等。

应用场景:

权限控制:拦截器可以用于检查用户的登录状态或者权限,根据结果做相应的处理,比如重定向到登录页面或者拒绝访问。
日志记录:拦截器可以在请求到达处理器之前和渲染视图之前记录请求的详细信息,如请求路径、参数、处理时间等,便于后续的监控与分析。
性能监控:可以使用拦截器在请求处理前后记录时间戳,计算处理时间,进行性能监控与分析。
数据预处理:拦截器可以用于对请求中的数据进行预处理,如数据格式转换、字符编码处理等。
请求转发和重定向:拦截器可以在处理请求前对请求进行重定向或者请求转发。
资源管理:可以在拦截器中进行对资源的管理和释放,比如打开/关闭数据库连接、释放内存资源等。

1、拦截器的配置

SpringMVC中的拦截器用于拦截控制器方法的执行
SpringMVC中的拦截器需要实现HandlerInterceptor
SpringMVC的拦截器必须在SpringMVC的配置文件中进行配置:

<bean class="com.atguigu.interceptor.FirstInterceptor"></bean>
<ref bean="firstInterceptor"></ref>
<!-- 以上两种配置方式都是对DispatcherServlet所处理的所有的请求进行拦截 -->
<mvc:interceptor><mvc:mapping path="/**"/><mvc:exclude-mapping path="/testRequestEntity"/><ref bean="firstInterceptor"></ref>
</mvc:interceptor>
<!-- 以上配置方式可以通过ref或bean标签设置拦截器,通过mvc:mapping设置需要拦截的请求,通过mvc:exclude-mapping设置需要排除的请求,即不需要拦截的请求
-->

2、拦截器的三个抽象方法

SpringMVC中的拦截器有三个抽象方法:

preHandle:控制器方法执行之前执行preHandle(),其boolean类型的返回值表示是否拦截或放行,返回true为放行,即调用控制器方法;返回false表示拦截,即不调用控制器方法

postHandle:控制器方法执行之后执行postHandle()

afterComplation:处理完视图和模型数据,渲染视图完毕之后执行afterComplation()

3、多个拦截器的执行顺序

a>若每个拦截器的preHandle()都返回true

此时多个拦截器的执行顺序和拦截器在SpringMVC的配置文件的配置顺序有关:

preHandle()会按照配置的顺序执行,而postHandle()和afterComplation()会按照配置的反序执行

b>若某个拦截器的preHandle()返回了false

preHandle()返回false和它之前的拦截器的preHandle()都会执行,postHandle()都不执行,返回false的拦截器之前的拦截器的afterComplation()会执行

总结

使用 Spring MVC 框架时,拦截器是一种非常有用的组件,可以在请求的不同阶段进行干预和自定义操作。以下是关于拦截器的一些详细信息和应用场景:

权限控制:拦截器可以用于验证用户的身份和权限,以决定是否允许继续访问受限资源。例如,可以在拦截器中检查用户是否已经登录,如果未登录,则可以将用户重定向到登录页面。如果用户已登录,但没有足够的权限访问某个功能,可以拦截请求并返回相应的错误页面。

日志记录:拦截器可以用于记录请求的详细信息,如请求路径、参数、处理时间等。这对于问题排查、性能分析和系统监控非常有帮助。例如,可以在拦截器的 preHandle 方法中记录请求开始的时间戳,在 postHandle 方法中计算处理时间,并将这些信息记录到日志中。

性能监控:与日志记录类似,拦截器也可以用于性能监控。通过记录请求开始和结束的时间戳,可以计算出请求的处理时间,并根据需要执行额外的性能监控操作,如记录响应时间、请求频率等指标。这样有助于发现潜在的性能瓶颈并进行优化。

数据预处理:拦截器可以对请求中的数据进行预处理,对数据格式进行检查、转换或校验,以确保数据的正确性和一致性。例如,可以在拦截器中将日期字符串转换为日期对象,或者验证请求参数的有效性。这样可以减轻控制器(Controller)的职责,提高代码的可读性和可维护性。

请求转发和重定向:通过拦截器,可以在请求处理之前或之后进行请求的转发或重定向。例如,可以在 preHandle 方法中对请求进行拦截,并根据特定的条件将请求转发到另一个处理器进行进一步处理,或者将请求重定向到其他页面。这样可以实现功能的跳转和流程的控制。

资源管理:拦截器可以用于管理和释放资源,确保资源在请求处理之前和之后正确地被打开和关闭。例如,可以在拦截器中打开数据库连接,并在请求完成后关闭连接,以免资源泄漏。这样可以提高系统的稳定性和资源利用率。

综上所述,拦截器是 Spring MVC 框架提供的强大工具,可以在请求处理过程中灵活干预和控制。通过拦截器,我们可以实现权限控制、日志记录、性能监控、数据预处理、请求转发和重定向,以及资源管理等功能,从而达到更好的代码管理、系统性能和用户体验。



在这里插入图片描述



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

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

相关文章

openlayers [七] 地图控件controls详解

文章目录 controls 简述常见的 controls 控件使用方法fullscreen 全屏mouseposition 鼠标位置控件overviewmap 鹰眼图scaleline 比例尺控件zoomslider 缩放滑块刻度控件 总结 controls 简述 上篇文章我们将了在地图上的交互(interaction)&#xff0c;那些都是一些隐性的需要去…

css3轮播图案例

轮播图案例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>…

SIFT 算法和SURF(Speeded Up Robust Features)算法的全称是什么,分别是什么意思,分别是用来干什么的?

问题描述&#xff1a;SIFT 算法和SURF(Speeded Up Robust Features)算法的全称是什么&#xff0c;分别是什么意思&#xff0c;分别是用来干什么的&#xff1f; 问题解答&#xff1a; SIFT 算法: 全称&#xff1a; 尺度不变特征变换&#xff08;Scale-Invariant Feature Transf…

AIGC笔记--特征线性调制(FiLM)层的实现

目录 1--特征线性调制层的作用 2--特征线性调制层的实现 3--论文实例 1--特征线性调制层的作用 特征线性调制&#xff08;Feature-wise Linear Modulation&#xff0c;FiLM&#xff09;层是一种神经网络模块&#xff0c;它可以用来实现特征的条件调整。FiLM层的主要功能是对…

数据结构——二叉树的遍历与应用

目录 一.前言 二. 二叉树链式结构的实现 2.1 前置说明 2.2 二叉树的遍历 2.2.1 前序、中序以及后序遍历 前序遍历&#xff1a; 中序遍历递归图&#xff1a; 后序遍历&#xff1a; 2.3节点个数 2.4叶子节点个数 2.5第K层的节点个数 2.6 二叉树查找值为x的节点 2.7 …

[M数学] lc2171. 拿出最少数目的魔法豆(数学+前缀和)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接&#xff1a;2171. 拿出最少数目的魔法豆 2. 题目解析 比较简单直接的思路吧&#xff0c;会发现最终的转换成的数组&#xff0c;每个元素要么是 0&#xff0c;不参与结果判断&#xff0c;要么大家都一样。想一想这个都一样…

【计算机网络】子网划分(经典基础练习题)

一、某主机IP地址为110.35.2.68&#xff0c;子网掩码为255.255.255.128&#xff0c;求网络地址&#xff1f; 二、有A类网络18.0.0.0的子网掩码为255.128.0.0&#xff0c;请问可以划分为多少个子网&#xff1f; 并写出每个子网的子网号&#xff1f; 三、将C类网119.181.25.0划分…

.NetCore Flurl.Http 4.0.0 以上管理客户端

参考原文地址&#xff1a;Managing Clients - Flurl 管理客户端 Flurl.Http 构建在堆栈之上System.Net.Http。如果您熟悉HttpClient&#xff0c;那么您可能听说过这个建议&#xff1a;不要为每个请求创建一个新客户端&#xff1b;重复使用它们&#xff0c;否则将面临后…

MySQL篇—性能压测工具mysqlslap介绍

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

oracle rac 12.2.0.1CPU使用率100%

oracle rac 12.2.0.1 CPU使用率100% 查看是集群的java进程"oracle.ops.opsctl.OPSCTLDriver config database"占用cpu 根据进程号查找父进程,发现是/oracle/GRID/122/perl/bin/perl /oracle/GRID/122/tfa/gcmproddb01/tfa_home/bin/tfactl.pl rediscover -mode full …

JUnit 5 单元测试框架

依赖安装 <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope> </dependency>…

Docker 安装 MongoDb4

Docker 安装mongoDb 获取mongodb安装参考 获取mongodb 注意&#xff1a; WARNING: MongoDB 5.0 requires a CPU with AVX support, and your current system does not appear to have that! **hub官网&#xff08;需要梯子&#xff09;&#xff1a;**https://hub.docker.com/_…

WAF攻防相关知识点总结1--信息收集中的WAF触发及解决方案

什么是WAF WAF可以通过对Web应用程序的流量进行过滤和监控&#xff0c;识别并阻止潜在的安全威胁。WAF可以检测Web应用程序中的各种攻击&#xff0c;例如SQL注入、跨站点脚本攻击&#xff08;XSS&#xff09;、跨站请求伪造&#xff08;CSRF&#xff09;等&#xff0c;并采取相…

Node.js基础---fs文件系统 读取和写入

什么是nodejs? 脚本语言需要一个解析器才能运行&#xff0c;JavaScript是脚本语言&#xff0c;在不同的位置有不一样的解析器&#xff0c;如写入html的js语言&#xff0c;浏览器是它的解析器角色。而对于需要独立运行的JS&#xff0c;nodejs就是一个解析器。 每一种解析器都是…

华为认证云计算专家(HCIE-Cloud Computing)--练习题

华为认证云计算专家&#xff08;HCIE-Cloud Computing&#xff09;–练习题 1.(判断题)华为云stack支持鲲鹏架构&#xff0c;业务可从X86过渡到鲲鹏。 正确答案&#xff1a;正确 2.(判断题)业务上云以后&#xff0c;安全方面由云服务商负责&#xff0c;客户自己不需要做任何防…

Mysql核心知识命令汇总

Mysql核心知识命令汇总 1、索引key和index 索引被用来快速找出一个列上用一特定值的行。所有的MySQL索引(PRIMARY、UNIQUE和INDEX)在B树中存储。字符串是自动地压缩前缀和结尾空间。作用&#xff1a; 快速找出匹配一个where子句的行执行联结时&#xff0c;从其他表检索行对特定…

详细介绍IP 地址、网络号和主机号、ABC三类、ip地址可分配问题、子网掩码、子网划分

1、 IP 地址: 网络之间互连的协议&#xff0c;是由4个字节(32位二进制)组成的逻辑上的地址。 将32位二进制进行分组&#xff0c;分成4组&#xff0c;每组8位(1个字节)。【ip地址通常使用十进制表示】ip地址分成四组之后&#xff0c;在逻辑上&#xff0c;分成网络号和主机号 2…

适合初学者的机器学习开源项目合集(已加入Github加速计划)

目录 开源项目合集[>> 机器学习路线图&#xff1a;mrdbourke/machine-learning-roadmap](https://gitcode.com/mrdbourke/machine-learning-roadmap)[>> 机器学习资源的汇总&#xff1a;johnmyleswhite/ML_for_Hackers](https://gitcode.com/johnmyleswhite/ML_for…

vue+elementUI el-select 中 没有加clearable出现一个或者多个×清除图标问题

1、现象&#xff1a;下方截图多清除图标了 2、在全局common.scss文件中加一个下方的全局样式noClear 3、在多清除图标的组件上层div加noClear样式 4、清除图标去除成功

第四讲_ArkTS装饰器(一)

ArkTS装饰器&#xff08;一&#xff09; 1. Builder装饰器1.1 在组件内定义构建函数1.2 全局定义构建函数 2. BuilderParam装饰器 1. Builder装饰器 Builder是一种更轻量的 UI 元素复用机制&#xff0c;可以将重复使用的 UI 元素抽象成一个方法&#xff0c;并用Builder修饰该方…