SpringMVC Interceptor拦截器

news2025/1/19 8:26:45

SpringMVC中的拦截器用于拦截控制器方法的执行,执行在Controller前后,和视图渲染完成后。如下图所示:
在这里插入图片描述

一、创建拦截器

继承HandlerInterceptor 接口,并实现其中的方法

public class FirstInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("FirstInterceptor===>preHandle");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("FirstInterceptor===>postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("FirstInterceptor===>afterCompletion");
    }
}

SpringMVC中的拦截器有三个抽象方法:
preHandle:控制器方法执行之前执行preHandle(),其boolean类型的返回值表示是否拦截或放行,返回true为放行,即调用控制器方法;返回false表示拦截,即不调用控制器方法
postHandle:控制器方法执行之后执行postHandle()
afterComplation:处理完视图和模型数据,渲染视图完毕之后执行afterComplation()

2、Spring配置文件中设置

    <mvc:interceptors>
        <bean class="com.rzg.interceptor.FirstInterceptor"></bean>
    </mvc:interceptors>

上面的配置等价与下面

    <bean id="firstInterceptor" class="com.rzg.interceptor.FirstInterceptor"></bean>
    <mvc:interceptors>
        <ref bean="firstInterceptor"/>
    </mvc:interceptors>

如果只在mvc:interceptors中配置一个拦截器,那么所有的请求都经过拦截器。以上配置的请求结果如下:

FirstInterceptor===>preHandle
FirstInterceptor===>postHandle
FirstInterceptor===>afterCompletion

如果要对部分控制器进行拦截,可以设置设置interceptor。以下配置将拦截所有的/*请求,例如/hello 、/abc ,但是不拦截/abc/cde。如果要拦截任意请求,使用/**

<bean id="firstInterceptor" class="com.rzg.interceptor.FirstInterceptor"></bean>
<!--    拦截器的设置-->
    <mvc:interceptors>
       <mvc:interceptor>
       <!--拦截的请求   -->
           <mvc:mapping path="/*"/>   
           <!-- 在mapping中排除以下拦截路径-->
           <mvc:exclude-mapping path="/hello2"/>
           <ref bean="firstInterceptor"/>
       </mvc:interceptor>
    </mvc:interceptors>

结果:

请求/hello FirstInterceptor===>preHandle
FirstInterceptor===>postHandle
FirstInterceptor===>afterCompletion
请求/hello2 不经过拦截器

3.设置多个拦截器

两个拦截器FirstInterceptor、SecondInterceptor。
配置文件中配置:

    <mvc:interceptors>
       <mvc:interceptor>
           <mvc:mapping path="/**"/>
           <bean class="com.rzg.interceptor.FirstInterceptor"/>
       </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.rzg.interceptor.SecondInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

请求结果:

FirstInterceptor===>preHandle
SecondInterceptor===>preHandle
SecondInterceptor===>postHandle
FirstInterceptor===>postHandle
SecondInterceptor===>afterCompletion
FirstInterceptor===>afterCompletion

  • 若每个拦截器的preHandle()都返回true
    此时多个拦截器的执行顺序和拦截器在SpringMVC的配置文件的配置顺序有关:
    preHandle()会按照配置的顺序执行,而postHandle()和afterComplation()会按照配置的反序执行
  • 若某个拦截器的preHandle()返回了false
    preHandle()返回false和它之前的拦截器的preHandle()都会执行,postHandle()都不执行,返回false的拦截器之前的拦截器的afterComplation()会执行

将SecondInterceptor 拦截器 preHandle 中返回 false

public class SecondInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 	Object handler) throws Exception {
        System.out.println("SecondInterceptor===>preHandle");
    	return false;
    }

测试结果:

FirstInterceptor===>preHandle
SecondInterceptor===>preHandle
FirstInterceptor===>afterCompletio

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

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

相关文章

儿子小伟刚刚再婚,大衣哥就河南新乡商演,这是给孙子攒奶粉钱吗

现如今的社会&#xff0c;因为人们的攀比心理&#xff0c;结一次婚能让人脱一层皮&#xff0c;尤其是农村赚钱难&#xff0c;结婚花钱就更难了。其实不只是普通老百姓&#xff0c;强如农民歌唱家大衣哥这样的人&#xff0c;也架不住儿子一而再&#xff0c;再而三的结婚。 大衣哥…

Qt基础之二十一:QtRO(Qt Remote Object)实现进程间通信

这里将QtRO单独从上一篇Qt基础之二十:进程间通信拎出来,因为它是Qt5.9以后新加入的模块,专门用于进程间通信。其使用步骤有点类似之前介绍过的RPC(Remote Procedure Call)框架:gRPC和thrift,关于这两个框架详见 Qt中调用thrift和Qt中调用gRPC QtRO基于Socket封装,不仅支…

小程序开发——模板与配置

一、WXML 模板语法 1.数据绑定的基本原则 ① 在 data 中定义数据 ② 在 WXML 中使用数据2.在 data 中定义页面的数据 在页面对应的 .js 文件中&#xff0c;把数据定义到 data 对象中即可&#xff1a;3. Mustache 语法的格式 把data中的数据绑定到页面中渲染&#xff0c;使用…

【测试】java+selenium环境搭建

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、下载安装谷歌浏览器二、下载谷歌驱动三、常见问题&解决方法1. SessionNotCreatedException2. The version of ChromeDriver only support xxxxxxxxx3. The path to the driver executable the path to普通小…

5-2输入/输出管理-I/O核心子系统

文章目录一.I/O调度二.设备保护三.SPOOLing技术&#xff08;假脱机技术&#xff09;四.设备的分配与回收1.设备分配时应该考虑的因素2.静态分配和动态分配3.设备分配管理中的数据结构&#xff08;1&#xff09;设备控制表DCT&#xff08;Device Control Table&#xff09;&…

MySQL进阶篇之Linux安装MySQL8.0.26

Linux安装MySQL 需要更多安装MySQL的教程&#xff0c;请查阅Linux学习笔记——MySQL数据库管理系统安装部署 1、MySQL下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 2、在FinalShell中输入rz&#xff0c;然后选择下载好的MySQL安装包&#xff0c;进行上…

【数据质量】一起聊聊数据质量

Garbage In, Garbage Out ​ 数据质量关注的是数据的健康&#xff0c;数据健康和人的健康很相似&#xff0c;人的健康会影响人的生活品质&#xff0c;同样数据的健康会影响数据的使用品质。为了保证我们健康&#xff0c;我们需要养成良好的生活习惯&#xff0c;膳食平衡&#x…

Open3D DBSCAN聚类(Python版本)

文章目录 一、简介二、算法步骤三、实现代码四、实现效果参考资料一、简介 DBSCAN算法,全称为“Density-Based Spatial Clustering of Applications with Node”,也就是“基于密度的聚类”。此类算法是假设聚类结构能通过样本分布的紧密程度确定,从样本密度的角度来考察样本…

亿发浅析:财务一体化功能与管理流程

在信息时代的背景下&#xff0c;企业信息化已成为中小企业降低成本、提高效率、提高竞争力的重要手段&#xff0c;也是中小企业实现长期可持续发展的有效途径。 信息化对企业管理的好处是显而易见的&#xff0c;如加快信息流&#xff0c;提高信息资源利用率&#xff0c;促进企业…

STM32使用FSMC驱动LCD

关于FSMC驱动LCD的函数LCD_WR_REG的理解首先你需要理解使用结构体LCD_BASE若有错误&#xff0c;请各位师兄师姐指点原理框图重要的函数理解关于LCD_BASE和函数LCD_WR_REG&#xff08;u16 regval&#xff09;的理解至于0X6C00 0802地址也是一样的。首先要说的是这是我个人的理解…

数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 (五)位拆分与运算

数字IC设计、验证、FPGA笔试必会 - Verilog经典习题 &#xff08;五&#xff09;位拆分与运算 &#x1f508;声明&#xff1a; &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN博客 &#x1f9e8;未经作者允许&#xff0c;禁止转载 &#x1f511;系列专栏&#xff1a;牛客Veri…

Burp Suite Professional 2023.1 (macOS, Linux, Windows) - Web 应用安全、测试和扫描

Burp Suite Professional, Test, find, and exploit vulnerabilities. 请访问原文链接&#xff1a;https://sysin.org/blog/burp-suite-pro-2023&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org Burp Suite Professional&a…

《后端技术面试 38 讲》学习笔记 Day 07

《后端技术面试 38 讲》学习笔记 Day 07 21丨分布式架构&#xff1a;如何应对高并发的用户请求 原文摘抄 当同时访问系统的用户不断增加的时候&#xff0c;需要消耗的系统计算资源也不断增加&#xff0c;需要更多的 CPU 和内存去处理用户的计算请求&#xff0c;需要更多的网络…

二叉树、平衡二叉树、红黑树、B树、B+树、B*树的区别

二叉树 如下图&#xff0c;是一个二叉树的结构图片&#xff1a; 可以看到无论是对象“9”、还是“5”、“13”、“2”、“7”、“11”、“15”它们的下面分别都叉了两个其他的对象。而且这两个对象都是左边的数值要小一些&#xff0c;右边的数值要大一些。 所以这就是二叉树的…

Qt+C++堆叠多窗口界面切换

程序示例精选 QtC堆叠多窗口界面切换 如需安装运行环境或远程调试&#xff0c;见文章底部个人微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC堆叠多窗口界面切换>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读…

停车系统源码-基于springboot+uniapp开源项目

Iparking停车收费管理系统-可商用介绍Iparking是一款基于springBoot的停车收费管理系统&#xff0c;支持封闭车场和路边车场&#xff0c;支持微信支付宝多种支付渠道&#xff0c;支持多种硬件&#xff0c;涵盖了停车场管理系统的所有基础功能。技术栈Springboot,Mybatis Plus,B…

聚观早报 | 推特将释放15亿用户名售卖;微信回应切断抖音外链

今日要闻&#xff1a;比亚迪摘得国内汽车年度销量冠军&#xff1b;推特将释放15亿用户名进行售卖&#xff1b;微信回应切断抖音外链&#xff1b;原阿里云盘负责人、Teambition 创始人齐俊元加入飞书&#xff1b;辉瑞CEO称新冠药不能太便宜推特将释放15亿用户名进行售卖 1 月 12…

直播回顾 | 如何运用数智化助力光伏上游产业节能降碳(下)——企业降碳篇

1月12日&#xff0c;始祖科技【始祖双碳研习社】行业解决方案第二期顺利结束&#xff0c;在第一期的基础上为大家带来了“双碳”政策对光伏上游企业提出的新要求&#xff0c;数智技术在光伏领域发挥双碳赋能作用&#xff0c;数智技术实现光伏领域“双碳”赋能的路径等多个维度的…

PMP证书获取指南来了

为什么考PMP证书是值得的&#xff1f;甚至对于管理人员来说是必须的&#xff1f; 1、个人能力的提高 考取PMP证书是一个系统的学习过程&#xff0c;让你的管理思维更加清晰&#xff0c;可能很多人都是从野路子&#xff0c;自己从实践中摸索管理经验&#xff0c;但是学完PMP证…

功率放大器在体外构建工程化心肌组织研究中的应用

实验名称&#xff1a;多功能明胶复合水凝胶的制备及体外构建工程化心肌组织的研究 研究方向&#xff1a;生物医学 测试目的&#xff1a; 制备一种基于GelMA的三维各向异性的电磁功能复合水凝胶支架&#xff08;GelMA-PDA-rGO-Fe3O4&#xff09;&#xff0c;由Fe3O4纳米颗粒修饰…