Spring Boot 进阶- Spring Boot 自定义拦截器详解

news2024/9/28 12:10:16

在这里插入图片描述
  上篇文章中我们创建了一个RestFul风格的接口,并且介绍了如何对其结果进行格式化的方式。这篇文章我们来讲在SpringMVC中常用到的另一个概念拦截器。

什么是拦截器?

  在Spring MVC中拦截器有点类似于在Servlet中的过滤器的概念,主要是用来拦截用户求,并且对用户请求进行相应的前置处理。例如鉴权、请求记录、日志处理、判断用户是否登录等等。那么在Spring Boot中如何来实现一个自定义的拦截器呢?

实现自定义拦截器

  如何自定义一个拦截器,首先我们知道在SpringMVC中有一个接口HandlerInterceptor,继承这个接口我们就可是实现一个自定义的拦截器。其源码如下

public interface HandlerInterceptor {
   

	default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
   

		return true;
	}

	default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable ModelAndView modelAndView) throws Exception {
   
	}

	default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable Exception ex) throws Exception {
   
	}

}

  会看到在这个接口中有三个方法如下

  • preHandler()方法:这个方法在控制器方法之前执行,这个方法返回一个布尔值,如果其返回值为ture的时候,标识可以继续往下执行后续的操作;如果返回false的时候,就会中断后续所有的操作,包括调用下一个拦截器或者控制器类中的方法执行等等。
  • postHandler()方法:这个方法会在调用控制器方法之后调用,在解析视图层之前调用,通过这个方法可以对请求中和视图模型中的内容进行修改。
  • afterCompletion()方法:这个方法会在整个的请求完成之后进行调用,也就是完成视图层渲染之后进行调用。主要用来记录一些用户的操作日志,完成一些资源清理的任务。

  下面我们就来通过一个小例子来看一下如何使用拦截器

防止重复提交拦截器

  在实际开发中,我们会遇到网络或者系统不稳定的情况,这个时候我们在页面上点击完提交按钮之后,系统并没有正常的返回提交成功,而用户接收不到提交成功的信号就会认为没有提交,就会重复点击提交按钮,造成在数据库中存在多个相同数据的情况。这个时候我们就可以通过拦截器来解决这种问题。

  代码如下,我们通过实现HandlerInterceptor接口来实现一个防止重复提交的拦截器。前面提到的,preHandle()方法的返回值会影响后续的调用,所以可以通过实现这个方法来控制拦截器是否执行后续的操作。

@Component
public abstract 

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

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

相关文章

2024双十一买啥最划算?2024双十一五款值得入手的好物入手

2024双十一购物狂欢节将至,还在为买什么而纠结吗?这里为你入手五款值得入手的好物。从生活必备到时尚单品,涵盖多个领域,让你在双十一以划算的价格买到心仪之物,开启品质生活新旅程。 一、西圣find可视挖耳勺 入手理…

【libp2p——NAT】

1. 什么是NAT NAT(Network Address Translation,网络地址转换)是指一种网络技术,它允许多个设备通过一个公共IP地址连接到互联网。NAT通常被用在家庭或小型办公室的路由器上,以允许多台计算机共享一个互联网连接。这种…

Tensorflow 2.0 cnn训练cifar10 准确率只有0.1 [已解决]

cifar10 准确率只有0.1 问题描述踩坑解决办法 问题描述 如果你看的是北京大学曹健老师的tensorflow2.0,你在class5的部分可能会遇见这个问题 import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.keras.layers import Dense, Dropout,MaxPooling2D,Fla…

揭秘 MrBeast 爆款视频秘籍,视频从业者必看!

MrBeast 是美国第一网红,可能也是世界第一网红。他的YouTube频道在2024年9月拥有3.17亿订阅者,成为订阅者最多的频道。这一庞大的粉丝基础不仅代表了他的影响力,也反映了他所创造内容的受欢迎程度。 视频制作的高投入 MrBeast每个视频的拍…

死磕P7: JVM类加载那些事儿,一起探知类的前世今生(一)

这是「死磕P7」系列第 005 篇文章,欢迎大家来跟我一起 死磕 100 天,争取在 2025 年来临之际,给自己一个交代。 前面几篇介绍了 JVM 的区域划分及垃圾收集相关的内容,只是告诉了你我有一栋豪华大酒店,大楼里有哪些房间&…

高级前端进阶:揭秘 MemFire Cloud 的强大助力

在前端开发的道路上,我们总是在追求效率与速度的平衡,如何写出优雅的代码,如何让开发流程更加顺滑成为了每个前端开发者的目标。对于那些希望提升效率、减少繁琐开发步骤的开发者来说,MemFire Cloud,一款国产的一站式应…

git忽略python项目中的__pycache__目录

一:编写.gitignore文件 # 忽略 tensorone-storage-log/ 目录 tensorone-storage-log/# 忽略 file_test 目录 file_test/# 忽略 .idea 目录 /.idea# 忽略 .vscode 目录 .vscode# 忽略 __pycache__ 目录及其所有子内容 **/__pycache__/ 二:提交更改&#x…

越来越卷,事无巨细的日报、周报难为死IT牛马们了!如何破局?

现在这环境做牛马真难呀 某中厂朋友吐槽说:“经济下行,公司要求越来越过分,不但要求9106,还要天天写日报都做了什么事项,每个事事项花了多少时间,要用不少时间来写;周报也是要求很细 还要总结&…

蜂鸟bebirdt15、西圣find、泰视朗可视挖耳勺好用吗?测评数据对比看这里

可视挖耳勺在当下已经被广泛使用,不过对于新手来说,选择一款优质产品却并不容易。蜂鸟t15、西圣find、泰视朗可视挖耳勺好用吗?作为一个测评博主,近期有不少用户问我这个问题。 根据目前市场上可视挖耳勺的品牌情况来看&#xff0…

宝塔centOs添加node环境变量

宝塔Linux添加node全局环境变量 ln -s /www/server/nodejs/v20.17.0/bin/node /usr/bin/node ln -s /www/server/nodejs/v20.17.0/bin/npm /usr/bin/npm ln -s /www/server/nodejs/v20.17.0/bin/pnpm /usr/bin/pnpm

Redis: Sorted Set 底层算法的简单分析

概述 我们先看下 Shorted Set 有序集合的内部数据结构所谓有序集合,比如有个容器,容器里边都已经排好序了,那无非就是快速的查找和插入不管你是查找还是插入,肯定要确定那个位置最简单的办法就是从最开头开始,挨个比较…

TPAMI 2024 | 数据不平衡克星,ProCo算法:长尾视觉识别的终极解决方案!

题目:长尾视觉识别的概率对比学习 作者: Chaoqun Du, Yulin Wang, Shiji Song, Gao Huang 摘要 长尾分布经常出现在现实世界的数据中,其中大量的少数类别包含有限数量的样本。这种不平衡问题极大地损害了主要为平衡训练集设计的标准监督学…

AI表情包项目变现实操,适合新手小白

做表情包还能赚钱吗?可能很多朋友会觉得这个问题很奇怪,毕竟我们平时用的表情包都是免费的。今天就带大家了解一下表情包背后的商业模式。 1、项目概况 微信表情包的售价一般在1~200元之间,最低售价是1元。可以看到网上这些表情包的销量还是…

【反素数】

题目 思路 首先分析 的性质 一定是 中约数最大的一定是约数同是最大的数字中值中最小的进一步挖掘性质,紧贴枚举的做法 约数最大值最小(也决定了层数、其它约束),是枚举的比较条件实现上述目的,枚举的质数种类在大小…

数据结构:栈 及其应用

逻辑结构: 栈(Stack)是一种遵循后进先出(LIFO, Last In First Out)原则的有序集合 (受限的线性表)。这种数据结构只允许在栈顶进行添加(push)或删除(pop&…

爆火!大模型算法岗 100 道面试题全解析,赶紧收藏!

大模型应该是目前当之无愧的最有影响力的AI技术,它正在革新各个行业,包括自然语言处理、机器翻译、内容创作和客户服务等等,正在成为未来商业环境的重要组成部分。 截至目前大模型已经超过200个,在大模型纵横的时代,不…

后端学习路线

后端学习路线 一、编程语言 至少需要学习一门编程语言,建议学习JAVA和GO语言。 二、数据库 数据库分为关系型数据库和非关系型数据库,区别在于分关系型数据库常用于大数据,而非关系型数据库一般不在大数据方面使用。 关系型数据库&#x…

重塑未来:组织文化建设助你应对时代挑战

在当今迅速变化的时代,变化已成为不可避免的常态。无论是技术的迅猛发展,还是市场需求的瞬息万变,个人和组织都必须学会适应和迎接变化。本文将探讨变化的重要性,并通过系统思维和敏捷方法论的视角,阐述如何有效地管理…

ai生产力 输出内容变现新方式 AI头像生成教程和变现方式分析

ai生产力 输出内容变现新方式 AI头像生成教程和变现方式分析:特别是以AI头像与壁纸生成为例,我们可以详细分析其制作过程和变现方式。 制作过程 选择合适的AI工具: 在市场上,存在多款AI生成图像的工具,如Stable Diff…

OJ在线评测系统 后端判题机架构搭建 使用原生实现Java安全管理器环境隔离

原生实现安全管理器环境隔离 限制用户的操作权限 文件 网络 执行 Java安全管理器 SecurityManager 来实现更严格的限制 是 Java 提供的保护 JVM Java安全的机制 可以实现更严格的资源和操作限制 编写安全管理器 只需要继承 SecurityManager类 我们可以从这个参数perm参数拿…