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

SpringMVC的拦截器(Interceptor)

拦截器简介

  • SpringMVC的拦截器Interceptor,主要是对Controller资源访问时进行拦截的基本操作的技术,当然拦截后可以进行权限控制,功能增强等都是可以的。拦截器类似于JavaWeb开发中的Filter,他们之间的区别如下图所示
    • Filter技术Interceptor
      技术范畴JavaWeb原生技术SpringMVC框架技术
      拦截/过滤范畴对所有请求都可以过滤,包括如何Servlet、JSP、其它资源等只有进行了SpringMVC管理的范畴的才拦截,主要拦截对于Controller的请求
      执行时机早于任何Servlet执行

      晚于DispatcherServlet执行

    • 实现了HandlerInterceptor接口,且被Spring管理的Bean都是拦截器
    • 方法名参数返回值解释
      preHandleHttpServletRequest request<br>HttpServletResponse response<br>Object handlerboolean在请求处理之前被调用。返回值表示是否继续执行后续的拦截器和处理器(如果返回 true)或中断请求处理(如果返回 false)。可用于登录验证、权限检查等前置处理。
      postHandle

      HttpServletRequest request<br>

      HttpServletResponse response<br>

      Object handler<br>

      ModelAndView modelAndView

      请求处理之后、视图渲染之前被调用。可以在该方法中对请求处理结果进行修改或增加一些公共数据供视图渲染使用。Handler是拦截到的Controller方法处理器,modelAndView是返回的模型视图对象
      afterCompletion

      HttpServletRequest request<br>

      HttpServletResponse response<br>

      Object handler<br>

      Exception ex

      在整个请求完成之后被调用,包括视图渲染完毕。可用于进行一些清理工作,如资源回收、记录请求日志等。Handler是拦截到的Controller方法处理器,ex是异常对象

拦截器快速入门

  • 创建一个拦截器类实现HandlerInterceptor接口,然后在SpringMVC配置文件中对接口类进行注册
  • 创建拦截器实现类
    • package com.example.Interceptor;import org.springframework.web.servlet.HandlerInterceptor;
      import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;public class Interceptor01 implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandler...");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandler....");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion....");}
      }
      
    • 配置文件

拦截器执行顺序

  • 当有多个拦截器配置在SpringMVC框架的配置文件中时,执行顺序就是配置顺序,拦截器中方法具体的执行顺序如下图
      • 上述是preHandler结果返回的都是true的运行顺序的结果
      • 上述某一个preHandler返回结果为false时。

拦截器执行原理 

当客户端发出请求之后,SpringMVC框架通过处理器映射器(HandlerMapping)将请求路径与对应资源匹配起来,原先是通过请求地址匹配到Conreoller控制器,现在再加入Interceptror后,在请求到控制器之前,处理器映射器(HandlerMapping)会根据拦截器的地址来处理对应的请求,(一个请求可能被多个拦截器所拦截,但是一个请求只能被一个控制器所处理),然后RequestMappingHandlerMapping将请求可以访问的资源进行封装为HandlerExecutionChain进行返回。然后再执行拦截器中的方法。

相关文章:

SpringMVC的拦截器(Interceptor)

拦截器简介 SpringMVC的拦截器Interceptor&#xff0c;主要是对Controller资源访问时进行拦截的基本操作的技术&#xff0c;当然拦截后可以进行权限控制&#xff0c;功能增强等都是可以的。拦截器类似于JavaWeb开发中的Filter&#xff0c;他们之间的区别如下图所示 Filter技术…...

【git】gitlab常用命令

gitlab官网 官网&#xff1a;官网 中文官网&#xff1a;中文官网 默认的gitlab安装目录 /opt/gitlab/bin 启动 gitlab-ctl start 查看状态 gitlab-ctl status 停止 gitlab-ctl stop 重启GitLab gitlab-ctl restart 查看gitlab的配置文件 配置的路径是&#xff1a;/…...

解读下SWD协议以及其应用

SWD协议原理 SWD&#xff08;Serial Wire Debug&#xff09;协议是一种用于ARM Cortex微控制器的调试接口协议。它定义了主机计算机与目标设备之间通过SWD线进行通信的格式和规范。 SWD协议使用两根线进行通信&#xff1a;SWDIO&#xff08;Serial Wire Debug I/O&#xff09…...

基于单目的光流法测速

目录 1.简介 2.代码实现 1.简介 基于单目的光流法是一种常见的计算机视觉技术&#xff0c;用于估计图像序列中物体的运动速度。它通过分析连续帧之间的像素变化来推断物体在图像中的移动情况。 背景&#xff1a; 光流法是计算机视觉领域中最早的运动估计方法之一&#xff0c…...

排序-算法

文章目录 一、排序的概念及引用1.1 排序概念1.2 排序运用1.3 常见排序算法 二、常见排序算法的实现2.1 插入排序2.1.1 基本思想2.1.2 直接插入排序2.1.3 希尔排序 2.2 选择排序2.2.1 基本思想2.2.2 直接选择排序2.2.3 堆排序 2.3 交换排序2.3.1 冒泡排序2.3.2 快速排序2.3.3 快…...

【特纳斯电子】基于单片机的火灾监测报警系统-实物设计

视频及资料链接&#xff1a;基于单片机的火灾监测报警系统-实物设计 - 电子校园网 (mcude.com) 编号&#xff1a; T0152203M-SW 设计简介&#xff1a; 本设计是基于单片机的火灾监测报警系统&#xff0c;主要实现以下功能&#xff1a; 1.通过OLED显示温度、烟雾、是否有火…...

网络安全就业形势怎么样?

泻药&#xff0c;以下都是我本人的肺腑之言&#xff0c;是答主深耕职场多年&#xff0c;转战数家公司总结周围朋友的从业经验才总结出来的行业真相&#xff0c;真心希望帮助到还没有步入职场的大家&#xff0c;尤其是24届的应届毕业生&#xff0c;多掌握些就业信息就能少走一些…...

【Golang】Go的并发和并行性解释。谁说Go不是并行语言?

偶然发现百度上有很多"师出同门"的"go是并发语言&#xff0c;而不是并行语言"的说法。让我顿感奇怪&#xff0c;"并行"说白了就是对CPU多核的利用&#xff0c;这年头不能利用多核的编译语言还有的混&#xff1f;而且还混的这么好&#xff1f;并且…...

k8s-16 k8s调度

调度器通过 kubernetes 的 watch 机制来发现集群中新创建且尚未被调度到 Node上的 Pod。调度器会将发现的每一个未调度的 Pod 调度到一个合适的 Node 上来运行。 kube-scheduler 是 Kubernetes 集群的默认调度器&#xff0c;并且是集群控制面的一部分如果你真的希望或者有这方面…...

【2023研电赛】全国技术竞赛一等奖:基于FPGA的超低时延激光多媒体终端

该作品参与极术社区组织的研电赛作品征集活动&#xff0c;欢迎同学们投稿&#xff0c;获取作品传播推广&#xff0c;并有丰富礼品哦~ 基于FPGA的超低时延激光多媒体终端 参赛单位&#xff1a;华东师范大学 指导老师&#xff1a;刁盛锡 参赛队员&#xff1a;王泽宇 谢祖炜 秦子淇…...

Annoy vs Milvus:哪个向量数据库更适合您的AI应用?知其然知其所以然

1. Annoy vs Milvus简介 Annoy 和 Milvus 都是用于向量索引和相似度搜索的开源库&#xff0c;它们可以高效地处理大规模的向量数据。 Annoy&#xff08;Approximate Nearest Neighbors Oh Yeah&#xff09;&#xff1a; Annoy 是一种近似最近邻搜索算法&#xff0c;它通过构…...

android 13.0 SystemUI导航栏添加虚拟按键功能(一)

1.概述 在13.0的系统产品开发中,在系统SystemUI的原生系统中默认只有三键导航,想添加其他虚拟按键就需要先在构建导航栏的相关布局中分析结构,然后添加相关的图标xml就可以了,然后添加对应的点击事件,就可以了,接下来先分析第一步关于导航栏的相关布局情况 然后实现功能 …...

内存管理-分页、虚拟地址、虚拟内容、页面置换算法

文章目录 一、5W2H角度分析内存管理What是内存管理Why需要内存管理Who使用内存管理Where内存管理应用When需要内存管理How内存管理工作How much内存管理的成本 二、分页什么是分页分页的原理分页的优缺点分页的应用 三、虚拟地址什么是虚拟地址虚拟地址的作用虚拟地址的转换虚拟…...

【C++入门】命名空间详解(从零开始,冲击蓝桥杯)

C入门 命名空间 南喵小鸡汤程序员可以让步&#xff0c;却不可以退缩&#xff0c;可以羞涩&#xff0c;却不可以软弱&#xff0c;总之&#xff0c;程序员必须是勇敢的。一 . 命名空间的介绍二.命名空间的实际应用1.为什么要有命名空间我们在使用变量时,通常会为他定义一个名字,在…...

通过代码MyBatis-plus实现对表中createTime和updateTime进行自动更新

通过代码MyBatis-plus实现对表中createTime和updateTime进行自动更新 实现这样的效果可以在数据库中设置&#xff0c;但是我们一般建议在代码里实现&#xff0c; 但是总不能每次insert和update的时候都手写new当前时间 因此推荐使用mybatis-plus 1导入依赖 <dependency&g…...

HTML 实时显示本地电脑时间(精确到毫秒)

<!DOCTYPE html> <html> <head><title>实时显示本地电脑时间&#xff08;精确到毫秒&#xff09;</title> </head> <body><h1>本地电脑时间&#xff08;精确到毫秒&#xff09;&#xff1a;</h1><h1 id"clock&q…...

opencv跨平台arm交叉编译之ubuntu

目录 1. 安装交叉编译工具链2. 安装依赖3. 配置工具链3.1 新建build目录3.2 安装cmake-gui3.3 工具链配置界面进行配置3.3.1 终端输入以下命令3.3.2 点击Configure&#xff0c;弹出编译方式选择对话框&#xff1a;3.3.3 点击Next3.3.4 点击Finish3.3.5 点击Configure。3.3.6 Ge…...

Git命令全集

1、克隆代码 查看项目地址 git remote -v直接克隆 git clone url克隆指定分支 git clone -b 分支 git地址RPC failed错误:修改Git的传输字节限制 git config --global http.postBuffer 10485760002、查看分支 查看 git branch -a切换分支 git branch 分支名从指定分支…...

[BigData:Hadoop]:安装部署篇

文章目录 一&#xff1a;机器103设置密钥对免密登录二&#xff1a;机器102设置密钥对免密登录三&#xff1a;机器103安装Hadoop安装包3.1&#xff1a;wget拉取安装Hadoop包3.2&#xff1a;解压移到指定目录3.2.1&#xff1a;解压移动路径异常信息3.2.2&#xff1a;切换指定目录…...

ubuntu 上vscode使用cmake编译运行c++程序

参考&#xff1a;ubuntu 上vscode使用cmake编译运行c程序_vscode ubuntu运行c程序_SCH0的博客-CSDN博客 文章是对官方过程的翻译&#xff1a; Get started with CMake Tools on Linux...

OpenClaw多模态飞书助手:Qwen3-VL:30B实战指南

OpenClaw多模态飞书助手&#xff1a;Qwen3-VL:30B实战指南 1. 为什么我们需要多模态飞书助手&#xff1f; 去年夏天&#xff0c;我负责一个跨部门协作项目时&#xff0c;每天要处理上百条飞书消息和几十份文档。最头疼的是同事发来的截图——有时是数据图表&#xff0c;有时是…...

人工智能|大模型 —— 量化 —— 一文搞懂大模型量化技术:GGUF、GPTQ、AWQ

目前关于大模型量化技术的文章层出不穷&#xff0c;但对其理论部分的深入探讨却相对较少。本文将对大模型量化技术进行系统性的介绍&#xff0c;并重点聚焦于理论层面的深入解析。 一、大模型量化基础 大模型量化的核心在于将模型参数的精度从较高的位宽&#xff08;bit-width…...

“超节点”的纷争开始了

3月26日&#xff0c;在“2026中关村论坛年会”上&#xff0c;中科曙光发布世界首个无线缆箱式超节点scaleX40。其单节点集成40张GPU&#xff0c;总算力超过28PFLOPS&#xff08;FP8精度&#xff09;&#xff0c;能够满足万亿参数大模型的训练与推理需求。产品采用标准19英寸箱式…...

CAD_Sketcher终极指南:如何在Blender中实现精准约束绘图

CAD_Sketcher终极指南&#xff1a;如何在Blender中实现精准约束绘图 【免费下载链接】CAD_Sketcher Constraint-based geometry sketcher for blender 项目地址: https://gitcode.com/gh_mirrors/ca/CAD_Sketcher 你是否曾在Blender中尝试绘制精确的机械零件或建筑平面图…...

具身智能系统集成与计算效率优化路径探析

具身智能作为连接人工智能与物理世界的核心载体&#xff0c;通过融合感知、决策、执行等多模块实现自主交互&#xff0c;其系统集成的合理性与计算效率的高低&#xff0c;直接决定了智能体在复杂场景中的落地能力。当前&#xff0c;具身智能正从实验室走向产业化应用&#xff0…...

OpenClaw浏览器自动化:ollama-QwQ-32B驱动的研究资料收集系统

OpenClaw浏览器自动化&#xff1a;ollama-QwQ-32B驱动的研究资料收集系统 1. 为什么需要自动化研究资料收集 作为一名经常需要查阅大量文献的技术写作者&#xff0c;我长期被资料收集的效率问题困扰。传统工作流程中&#xff0c;我需要手动在Google Scholar、arXiv、知乎等平…...

Obsidian Local Images Plus 插件使用指南

Obsidian Local Images Plus 插件使用指南 【免费下载链接】obsidian-local-images-plus This repo is a reincarnation of obsidian-local-images plugin which main aim was downloading images in md notes to local storage. 项目地址: https://gitcode.com/gh_mirrors/o…...

零基础一键配置黑苹果:OpCore-Simplify智能工具让复杂变简单

零基础一键配置黑苹果&#xff1a;OpCore-Simplify智能工具让复杂变简单 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果配置时面对满屏代…...

彻底解决电脑噪音烦恼:FanControl风扇控制软件完全指南

彻底解决电脑噪音烦恼&#xff1a;FanControl风扇控制软件完全指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

Fast-GitHub:突破网络瓶颈的开发效率工具解决方案

Fast-GitHub&#xff1a;突破网络瓶颈的开发效率工具解决方案 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 1 痛点直击&#xff…...