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

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

在这里插入图片描述
  上篇文章中我们创建了一个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.mrgr.cn/news/38150.html

相关文章:

  • MYSQL-查看函数创建语句语法(五)
  • 人只活一次,活出一道光吧
  • Postgresql源码(136)syscache/relcache 缓存及失效机制
  • 2. Linux系统——文件目录管理操作
  • 3.整数二分
  • C语言开发基础新手快速入门及精通系列学习教程(系统性完整C语言学习笔记整理)
  • 逆变器控制技术
  • 继承实现单例模式的探索(二)
  • 前端大模型入门:使用Transformers.js手搓纯网页版RAG(二)- qwen1.5-0.5B - 纯前端不调接口
  • 变量的定义和声明
  • C++入门基础知识90(实例)——实例15【求两数的最大公约数】
  • 初试React前端框架
  • 昇思MindSpore进阶教程--数据处理管道支持Python对象
  • 软件设计模式概述
  • 【JAVA开源】基于Vue和SpringBoot的师生健康管理系统
  • # linux从入门到精通(三)
  • 【幂简集成】手机归属地查询API,精准获取号码所在地,提升数据准确率
  • flatten()
  • Python知识点:如何使用Spark与PySpark进行分布式数据处理
  • 基于SSH的酒店管理系统的设计与实现 (含源码+sql+视频导入教程+文档+PPT)