spring 拦截器

2023-09-18 19:18:09

Spring 拦截器是在处理请求的过程中,可以在特定的时机对请求进行一些处理,比如记录日志、进行权限校验、统计请求时间等。

实现步骤:

  1. 创建一个拦截器类,实现 HandlerInterceptor 接口,并重写其方法。
  2. 在 Spring 配置文件中添加拦截器配置,可以配置拦截的 URL,也可以对所有 URL 进行拦截。
  3. 在拦截器的方法中编写拦截器逻辑,比如在 preHandle 方法中进行权限校验,在 postHandle 方法中记录日志,在 afterCompletion 方法中统计请求时间等。
  4. 在控制器类或方法上通过 @InterceptorRef 注解指定拦截器。

拦截器原理:

  1. 在请求到达 DispatcherServlet 前会先经过拦截器链中的所有拦截器的 preHandle 方法。
  2. 如果 preHandle 方法返回 true,则继续执行下一个拦截器的 preHandle 方法,直到所有拦截器的 preHandle 方法都返回 true。
  3. 如果有拦截器的 preHandle 方法返回 false,则请求停止向下执行,返回到拦截器链中已经执行过的拦截器的 afterCompletion 方法。
  4. 如果所有拦截器的 preHandle 方法都返回 true,则执行控制器方法,并根据控制器方法的返回值来确定是否执行拦截器链中的 afterCompletion 方法。
  5. 执行完控制器方法后,会执行拦截器链中所有拦截器的 postHandle 方法,并将控制器方法的返回值传递给拦截器的 postHandle 方法。
  6. 最后执行拦截器链中所有拦截器的 afterCompletion 方法。
更多推荐

[NLP] LLM---<训练中文LLama2(三)>对LLama2进行中文预料预训练

预训练预训练部分可以为两个阶段:第一阶段:冻结transformer参数,仅训练embedding,在尽量不干扰原模型的情况下适配新增的中文词向量。第二阶段:使用LoRA技术,为模型添加LoRA权重(adapter),训练embedding的同时也更新LoRA参数。第一阶段预训练由于第一阶段预训练会冻结transfor

Java基于SpringBoot的校园交友网站的设计与实现

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W+,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌文章目录一、效果演示二、前言介绍三、主要技术四、系统设计(部分)4.1、主要功能模块设计4.2、系统登录流程设计五、运行截图5.1、系统功能模块5.1.

Linux高性能服务器编程 学习笔记 第六章 高级IO函数

pipe函数用于创建一个管道,以实现进程间通信:fd参数是一个包含两个int的数组。该函数成功时返回0,并将一对打开的文件描述符填入其参数指向的数组,如果失败,则返回-1并设置errno。pipe函数创建的这两个文件描述符fd[0]和fd[1]分别构成管道的两端,往fd[1]写入的数组可以从fd[0]读出,并且fd[0

夸克扫描王识别精度领跑行业 愿携手各方伙伴探索AIGC应用新范式

日前,在“AIGC与场景化应用创新”主题研讨会上,阿里智能信息事业群夸克视觉技术负责人黄锐华分享了AI技术应用于扫描场景的最新成果。他表示,AIGC给手机扫描产品打开了创新空间,搭载大模型技术的夸克扫描王对识别手写字体、复杂公式和版式理解上的准确率达到了新高度。(夸克视觉技术负责人:黄锐华)经过几十年的发展,扫描技术已

【从入门到起飞】JavaSE—方法引用

🎊专栏【JavaSE】🍔喜欢的诗句:更喜岷山千里雪三军过后尽开颜。🎆音乐分享【Thetruththatyouleave】🥰欢迎并且感谢大家指出我的问题文章目录🍔概述🍔注意🎈如何确定是否是函数式接口🍔示例🎄方法引用的分类🏳️‍🌈引用静态方法🏳️‍🌈引用成员方法🛸注意🏳️‍🌈引用构造方法🛸

python脚本(渗透测试)

python爬取edusrc通过此脚本,可以爬取edusrc的目标信息,生成目标字典,为下一步开发自动化测试工具做准备importqueueimportthreadingimporttimeimportrequestsfrombs4importBeautifulSoupimportredefget_edu_name()

NLP任务评价指标(BLEU,METOR,ROUGH,CIDEr)

BLEU,METEOR,ROUGE一般在机器翻译里用,CIDEr一般在图像字幕生成里用BLEU所谓BLEU,最开始是用于机器翻译中。他的思想其实很native,对于一个给定的句子,有标准译文S1,还有一个神经网络翻译的句子S2。BLEU的思想就是对于出现机器翻译S2的所有短语,看有多少个短语出现在S1中,然后算一下这个

Flink

flink应用场景maven依赖<properties><flink.version>1.17.0</flink.version></properties><dependencies><dependency><groupId>org.apache.flink</groupId><artifactId>flink-str

react 通过ref 获取对应 dom 的位置信息

需求:在点击某个dom元素的时候滚动条要同步滚动进程:获取ref打印,打印出来是一个dom元素,看不到有什么方法查找dom属性信息找到了两个参数,offsetLeft:返回元素的水平偏移位置。offsetTop:返回元素的垂直偏移位置。这两个参数都是基于父节点的,可以直接使用this.cellMainBox.curre

OceanMind海睿思入选弯弓研究院《2023中国营销技术生态图谱8.0》

近日,由国内MarTech领域知名机构弯弓研究院主办的第五届营销数字化大会暨营销科技MarTech交易展在广州成功召开。本次大会发布了《2023中国营销技术生态图谱8.0版》(以下简称“弯弓图谱8.0”),中新赛克海睿思凭借成熟的技术实力成功入选弯弓图谱8.0的中台板块,成为数据与分析领域本土优秀代表服务商之一。随着企

Linux 共享内存

#include<sys/ipc.h>#include<sys/shm.h>intshmget(key_tkey,size_tsize,intshmflg);功能:创建一个新的内存段或者获得一个既有的共享内存段的标识。新创建的内存段中的数据都会被初始化为0参数:-key:key_t类型是一个整型,通过这个创建或者找到一

热文推荐