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

SpringMVC 学习(九)之拦截器

目录

1 拦截器介绍

2 创建一个拦截器类

3 配置拦截器


1 拦截器介绍

        在 SpringMVC 中,拦截器 (Interceptor) 是一种用于拦截 HTTP 请求并在请求处理之前或之后执行自定义逻辑的组件。拦截器可以用于实现以下功能:

  • 权限验证:在请求处理之前进行用户身份验证和授权
  • 日志记录:记录请求的相关信息,如请求路径、参数、处理时间等
  • 异常处理:捕获并处理请求处理过程中抛出的异常
  • 性能监控:统计请求的响应时间、吞吐量等性能指标
  • 数据转换:在请求处理之前或之后对请求或响应的数据进行转换或修改
  • 缓存控制:在请求处理之前检查缓存,决定是否从缓存中获取数据

从以上功能可以看出,拦截器和过滤器作用很相似,但它们存在一些区别。

  • 层次结构:拦截器是 SpringMVC 框架特有的组件,不依赖 servlet 容器,过滤器是 Web 容器级别的组件,依赖 servlet 容器,可以应用于任何 Web 应用
  • 拦截范围:拦截器只能对 SpringMVC 的请求起作用,而过滤器则可以对几乎所有的请求起作用。拦截器可以获取 Spring 容器中的各个 bean,而过滤器就不行,在拦截器注入一个 service,可以调用业务逻辑
  • 触发时机:拦截器在 SpringMVC 的控制器方法被调用之前或之后触发,可以拦截并处理控制器方法的调用。过滤器在 HTTP 请求到达 Web 服务器之前或之后触发,可以在请求进入应用 (SpringMVC) 之前或响应返回给客户端之前进行处理
  • 调用顺序:过滤器在拦截器之前被调用,它们都可以按照 XML 文件中的配置顺序依次执行或注解 @Order 指定的顺序执行

2 创建一个拦截器类

        创建一个拦截器类需要实现 HandlerInterceptor 接口,该接口包括三个方法:preHandle、postHandle 和 afterCompletion。在这些方法中,可以编写拦截器的逻辑。

  • preHandle:控制器方法执行之前执行 preHandle(),其 boolean 类型的返回值表示是否拦截或放行,返回 true 表示放行,即调用控制器方法;返回 false 表示拦截,即不调用控制器方法
  • postHandle:控制器方法执行之后,渲染视图之前执行 postHandle()
  • afterComplation:处理完视图和模型数据,渲染视图完毕之后执行 afterComplation()
public class CustomInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 在处理器执行之前调用String userName=request.getParameter("userName");String password = request.getParameter("password");if (userName==null||password==null){response.setStatus(500);response.setContentType("text/html; charset=UTF-8");response.getWriter().print("参数缺失");return false;}//进行用户校验if (userName.equals("admin")&&password.equals("admin")){return true; // 返回true继续执行,返回false中断执行}else {response.setStatus(500);response.setContentType("text/html; charset=UTF-8");response.getWriter().print("用户名或密码错误");return false;}}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// 在处理器执行之后,返回ModelAndView之前调用}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 在整个请求处理完成后调用}
}

3 配置拦截器

基于注解

addPathPatterns 用于设置拦截哪些请求,excludePathPatterns 用于设置不拦截哪些请求

@Configuration
public class MvcConfig implements WebMvcConfigurer {@Autowiredprivate CustomInterceptor customInterceptor ;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(customInterceptor).addPathPatterns("/**").excludePathPatterns("/error");}
}

基于 XML

通过 <mvc:mapping> 设置需要拦截的请求,通过 <mvc:exclude-mapping> 设置需要排除的请求,即不需要拦截的请求
<mvc:interceptors><mvc:interceptor><!-- 拦截所有 URL --><mvc:mapping path="/**"/><!-- 不拦截 /testRequestEntity/ --><mvc:exclude-mapping path="/testRequestEntity"/><-- 拦截器类 --><bean class="com.example.CustomInterceptor" /></mvc:interceptor>
</mvc:interceptors>

注:对于多个拦截器,前面的拦截器不通过,即 preHandle() 返回 false,中断后续执行。

相关文章:

SpringMVC 学习(九)之拦截器

目录 1 拦截器介绍 2 创建一个拦截器类 3 配置拦截器 1 拦截器介绍 在 SpringMVC 中&#xff0c;拦截器 (Interceptor) 是一种用于拦截 HTTP 请求并在请求处理之前或之后执行自定义逻辑的组件。拦截器可以用于实现以下功能&#xff1a; 权限验证&#xff1a;在请求处理之前…...

TCP/IP-常用网络协议自定义结构体

1、TCP/IP模型&#xff1a; 2、TCP/IP- 各层级网络协议&#xff08;从下往上&#xff09;&#xff1a; 1&#xff09;数据链路层&#xff1a; ARP: 地址解析协议&#xff0c;用IP地址获取MAC地址的协议&#xff0c;通过ip的地址获取mac地 …...

内部控制提纲

当然&#xff0c;以下是一个更详细的关于内部控制的论文提纲&#xff1a; 一、引言 1.1 内部控制的定义与重要性 解释内部控制的基本概念和它在企业管理中的作用阐述内部控制对企业风险管理和运营效率的影响 1.2 内部控制的目标与原则 列出内部控制的主要目标&#xff0c;…...

江科大stm32 定时器 TIM输出比较--学习笔记

这几天遇到输出比较相关的问题&#xff0c;于是来学习下TIM输出比较部分知识点&#xff01; 输出比较简介 CNT是计数器的值&#xff0c;CCR寄存器是捕获/ 比较寄存器 简单的讲&#xff0c;输出比较就是用来输出PWM波形。 PWM简介 占空比&#xff1a;高电平占一个周期的比例。…...

VHDL-2008语言支持

VHDL-2008语言支持 介绍 AMD Vivado™合成支持VHDL-2008标准的可合成子集。这个以下部分介绍了支持的子集以及使用它的过程。将Vivado设置为使用VHDL-2008有几种方法可以使用Vivado运行VHDL-2008文件。您可以转到源文件属性窗口&#xff0c;并从可用文件类型的下拉列表中设置…...

linux系统git的安装和配置

安装和配置 安装gitYum安装Git编译安装 运行 Git 前的配置配置git命令集配置过程 获取帮助 安装git Yum安装Git yum install git -y编译安装 编译安装可以安装较新版本的git Git下载地址&#xff1a; https://github.com/git/git/releases # 安装依赖关系 yum install curl-d…...

oracle11g数据库 冷备份与冷恢复

我们在做备份时&#xff0c;究竟需要备份数据库的哪些文件呢&#xff1f; 其实只需要备份数据文件和控制文件就可以了&#xff0c;其他的参数文件&#xff0c;重做日志文件以及口令文件与数据文件相比都非常小&#xff0c;所以在一般情况下都会一起备份。 冷备份步骤&#xf…...

考研数据结构算法机试训练1

中南大学上机压轴题 测试数据&#xff1a; 3 500 0.6 100 0.8 200 0.7 100 输出 390首先要对输入的折扣进行排序&#xff0c;优先使用比率低的z进行支付。 然后用lowcost记录目前多少钱是打过折的。T-lowcost就是剩余没打折的。 每次循环用上一个人的折扣额度。若所有人折扣额…...

SAP PO接口行项目json缺少中括号[]问题

PO接口小问题问题&#xff1a;如果需要同时传输DATA与ITEM&#xff0c;此处选择很重要&#xff0c;如果选择&#xff1a;HTTP Header ITEM将缺少[].需要注意 PO接口小问题 问题&#xff1a;如果需要同时传输DATA与ITEM&#xff0c;此处选择很重要&#xff0c;如果选择&#…...

STM32_DS18B20_1_芯片简介及初始化配置

DS18B20介绍 DS18B20数字温度计提供9位到12位摄氏度的温度测量&#xff0c;并具有非易失性&#xff0c;用户可编程的上下触发点的报警功能。DS18B20通过1线总线进行通信&#xff0c;根据定义&#xff0c;该总线只需要一条数据线&#xff0c;即可与中央微处理器进行通信…...

每天一个数据分析题(一百六十四)

关于OLAP系统&#xff0c;下列选项不正确的是&#xff08;&#xff09; A. 是基于数据仓库的信息进行分析处理过程 B. 用户数量相对较少&#xff0c;其用户主要是业务决策人员与管理人员 C. 对响应时间要求非常高。 D. 基础数据来源于生产系统的操作数据&#xff0c;也就是…...

单词倒排——c语言解法

以下是题目&#xff1a; 这个题中有三个点&#xff0c; 一个是将非字母的字符转换为空格&#xff0c; 第二是如果有两个连续的空格&#xff0c; 那么就可以将这两个连续的空格变成一个空格。 第三个点就是让单词倒排。 那么我们就可以将这三个点分别封装成三个函数。 还有就是…...

Python + Selenium —— 网页元素定位之class name定位!

class 属性可以为元素应用一个或者多个 CSS 样式类。 利用此属性可以与指定的 CSS 样式类关联起来&#xff0c;以此达到设置元素样式的功能。 可以这样理解&#xff0c;比如一个页面上的所有按钮&#xff0c;都想做成同样的样式&#xff0c;那么是不是要在每个按钮上写同样的 c…...

matlab simulink变压器温度仿真

1、内容简介 略 48-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 matlab simulink变压器温度仿真_哔哩哔哩_bilibili 4、参考论文 略 大型油浸风冷变压器绕组温度场分析_高原 基于顶层油温的变压器绕组热点温度计算改进模型_陈伟根 基于热电类比理论的油浸式电…...

设计模式七:责任链模式

文章目录 1、责任链模式2、spring中的责任链模式Spring InterceptorServlet FilterNetty 1、责任链模式 责任链模式为请求创建了一个接收者对象的链&#xff0c;在这种模式下&#xff0c;通常每个节点都包含对另一个节点者的引用。每个节点针对请求&#xff0c;处理自己感兴趣…...

Git,GitHub与GitLab分别是什么?有什么关系和区别?

Git 定义&#xff1a;Git 是一个分布式版本控制系统&#xff0c;用于跟踪文件的变化&#xff0c;并协助多人协作开发软件项目。作用&#xff1a;Git 可以在本地存储完整的项目历史记录&#xff0c;并允许开发者在不同的分支上进行独立的开发&#xff0c;最后将它们合并到主干分…...

【Spring连载】使用Spring Data访问 MongoDB----Template API 查询Documents

【Spring连载】使用Spring Data访问 MongoDB----Template API 查询Documents 一、 查询集合中的Documents二 选择字段三、 其他查询选项3.1 Hints3.2 游标批大小Cursor Batch Size3.3 Collations3.4 读取首选项Read Preference3.5 Comments 四、查询Distinct值五、GeoSpatial Q…...

git describe

git describe一般用于查看当前提交距离上次最近的tag是什么&#xff0c;并且还可以知道差了多少个commit&#xff0c;在工程实践当中是个非常好用的命令 如果git describe后面什么都不加的话&#xff0c;默认找的是最近的有注释的tag 如何打有注释的tag打注释&#xff1f; g…...

React Switch用法及手写Switch实现

问&#xff1a;如果注册的路由特别多&#xff0c;找到一个匹配项以后还会一直往下找&#xff0c;我们想让react找到一个匹配项以后不再继续了&#xff0c;怎么处理&#xff1f;答&#xff1a;<Switch>独特之处在于它只绘制子元素中第一个匹配的路由元素。 如果没有<Sw…...

PowerShell执行策略:确保脚本安全执行的关键

PowerShell执行策略&#xff1a;确保脚本安全执行的关键 在自动化和脚本任务管理中&#xff0c;PowerShell 是 Windows 系统管理员和自动化工程师的强大工具。但随着这种强大的能力也带来了安全风险&#xff0c;特别是在执行未经验证的脚本时。为了降低这种风险&#xff0c;Po…...

如何用Video-subtitle-extractor本地提取87种语言视频硬字幕:终极完整指南

如何用Video-subtitle-extractor本地提取87种语言视频硬字幕&#xff1a;终极完整指南 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字…...

因果AI新引擎:一文读懂反事实数据增强的现在与未来

因果AI新引擎&#xff1a;一文读懂反事实数据增强的现在与未来 引言&#xff1a;从“已发生”到“如果会”——数据增强的范式革命 在传统机器学习中&#xff0c;我们习惯于从历史数据中学习规律。然而&#xff0c;现实世界充满了未被观察到的可能性——“如果当时用了另一种…...

别再折腾Python版本了!Windows Server上Seafile 5.0.3保姆级安装避坑指南

Windows Server上Seafile 5.0.3企业级部署全攻略 当企业需要搭建私有云存储时&#xff0c;Seafile凭借其出色的文件同步和团队协作功能成为热门选择。但在Windows Server环境部署时&#xff0c;Python版本兼容性问题往往成为技术人员的噩梦。本文将彻底解决这个痛点&#xff0…...

YOLO26实战:红外森林火灾与烟雾识别系统(项目源码+数据集+模型权重+UI界面+python+深度学习+远程环境部署)

摘要 森林火灾是破坏生态环境、威胁人类生命财产安全的重大自然灾害之一。传统火灾监测手段存在响应慢、覆盖范围有限等问题。本系统基于YOLO26目标检测算法&#xff0c;构建了一套针对红外森林火灾烟雾识别检测系统。系统以红外图像为输入&#xff0c;可同时识别“火灾”&…...

题解:洛谷 AT_abc391_c [ABC391C] Pigeonhole Query

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…...

如何快速下载Steam游戏清单:Onekey一键获取Depot Manifest完整指南

如何快速下载Steam游戏清单&#xff1a;Onekey一键获取Depot Manifest完整指南 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey Onekey是一款专为Steam平台设计的Depot Manifest下载器&#xff0…...

xalpha 核心组件详解:基金信息获取与净值管理

xalpha 核心组件详解&#xff1a;基金信息获取与净值管理 【免费下载链接】xalpha 基金投资管理回测引擎 项目地址: https://gitcode.com/gh_mirrors/xa/xalpha xalpha 是一款强大的基金投资管理回测引擎&#xff0c;能够帮助投资者轻松获取基金信息、管理净值数据并进行…...

react-native-shared-element 跨平台适配指南:iOS、Android 和 Web 的实现差异

react-native-shared-element 跨平台适配指南&#xff1a;iOS、Android 和 Web 的实现差异 【免费下载链接】react-native-shared-element Native shared element transition "primitives" for react-native &#x1f4ab; 项目地址: https://gitcode.com/gh_mirro…...

Windows 安装云崽

安装LLBot 下载安装包 前往 GitHub Release 页面 下载最新版本的 LLBot-Desktop-win-x64.zip 解压文件 将下载的 zip 文件解压到任意目录&#xff0c;建议选择一个固定的位置&#xff08;如 D:\LLBot&#xff09; 启动程序 双击 llbot.exe 文件&#xff0c;然后在界面上点…...

如何让导航栏的下落动画效果更慢?

通过调整 CSS 动画的持续时间&#xff08;如将 0.2s 改为 0.6s 或更长&#xff09;&#xff0c;即可平滑控制 Bootstrap 导航栏下落动画的速度&#xff0c;同时需配合 transform 与 opacity 实现更自然的过渡效果。 通过调整 css 动画的持续时间&#xff08;如将 0.2s 改为…...