【Spring Boot】 深入理解Spring Boot拦截器:自定义设计与实现全攻略

在这里插入图片描述

💓 博客主页:从零开始的-CodeNinja之路

⏩ 收录文章:【Spring Boot】 深入理解Spring Boot拦截器:自定义设计与实现全攻略

🎉欢迎大家点赞👍评论📝收藏⭐文章
在这里插入图片描述

在这里插入图片描述

目录

  • SpringBoot统⼀功能处理
    • 一. 什么是拦截器?
    • 二. 拦截器执行流程
    • 三. 拦截器
        • 3.1 定义拦截器
        • 3.2 注册配置拦截器
        • 3.3 拦截路径的配置

SpringBoot统⼀功能处理

一. 什么是拦截器?

  • 需要修改每个接口的处理逻辑
  • 需要修改每个接口的返回结果
  • 接口定义修改,前端代码也需要跟着修改

有没有更简单的办法,统⼀拦截所有的请求,并进行Session校验呢,这里我们学习⼀种新的解决办法:拦
截器

拦截器是Spring框架提供的核心功能之⼀,主要用来拦截用户的请求,在指定方法前后,根据业务需要执
行预先设定的代码.也就是说,允许开发⼈员提前预定义⼀些逻辑,在用户的请求响应前后执行.也可以在用户请求前阻止其执行.

在拦截器当中,开发⼈员可以在应用程序中做⼀些通用性的操作,比如通过拦截器来拦截前端发来的
请求,判断Session中是否有登录用户的信息.如果有就可以放行,如果没有就进行拦截.
在这里插入图片描述

二. 拦截器执行流程

正常的调用顺序:在这里插入图片描述
有了拦截器之后,会在调用Controller之前进行相应的业务处理,执行的流程如下图在这里插入图片描述

  1. 添加拦截器后,执行Controller的方法之前,请求会先被拦截器拦截住.执行 preHandle() 方法,
    这个方法需要返回⼀个布尔类型的值.如果返回true,就表示放行本次操作,继续访问controller中的
    方法.如果返回false,则不会放行(controller中的方法也不会执行).

  2. controller当中的方法执行完毕后,再回过来执行 postHandle() 这个方法以及
    afterCompletion() 方法,执行完毕之后,最终给浏览器响应数据.

三. 拦截器

拦截器的基本使用.

拦截器的使用步骤分为两步:

  1. 定义拦截器
  2. 注册配置拦截器
  3. 拦截器的拦截路径配置
3.1 定义拦截器

自定义拦截器:实现HandlerInterceptor接口,并重写其所有方法

@Slf4j
@Component
public class LoginInterceptor implements HandlerInterceptor {

	@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler) throws Exception {
	log.info("LoginInterceptor 目标方法执行前执行..");
	return true;
	}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler, ModelAndView modelAndView) throws Exception {
	log.info("LoginInterceptor 目标方法执行后执行");
	}

@Override
public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) throws Exception {
	log.info("LoginInterceptor 视图渲染完毕后执行,最后执行");
	}
}
  • preHandle()方法:目标方法执行前执行.返回true:继续执行后续操作;返回false:中断后续操作.

  • postHandle()方法:目标方法执行后执行

  • afterCompletion()方法:视图渲染完毕后执行,最后执行(后端开发现在⼏乎不涉及视图,暂不了 解)

3.2 注册配置拦截器

注册配置拦截器:实现WebMvcConfigurer接口,并重写addInterceptors方法

@Configuration
public class WebConfig implements WebMvcConfigurer {

//⾃定义的拦截器对象
@Autowired
private LoginInterceptor loginInterceptor;

@Override
public void addInterceptors(InterceptorRegistry registry) {
	//注册⾃定义拦截器对象
	registry.addInterceptor(loginInterceptor).addPathPatterns("/**");//设置拦截器拦截的请求路径( /** 表示拦截所有请求)
	}
}

启动服务,试试访问任意请求,观察后端日志
在这里插入图片描述
可以看到preHandle方法执行之后就放行了,开始执行目标方法,目标方法执行完成之后执行
postHandle和afterCompletion方法.

我们把拦截器中preHandle方法的返回值改为false,再观察运行结果
在这里插入图片描述
可以看到,拦截器拦截了请求,没有进行响应.

3.3 拦截路径的配置

拦截路径是指我们定义的这个拦截器,对哪些请求生效.

我们在注册配置拦截器的时候,通过 addPathPatterns() 方法指定要拦截哪些请求.也可以通过excludePathPatterns() 指定不拦截哪些请求.

上述代码中,我们配置的是 /** ,表示拦截所有的请求.
比如用户登录校验,我们希望可以对除了登录之外所有的路径生效

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {
	//⾃定义的拦截器对象
	@Autowired
	private LoginInterceptor loginInterceptor;
	
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
	//注册⾃定义拦截器对象
	registry.addInterceptor(loginInterceptor)
		.addPathPatterns("/**")
		.excludePathPatterns("/user/login");//设置拦截器拦截的请求路径
	(/** 表示拦截所有请求)
	}
}

在拦截器中除了可以设置 /** 拦截所有资源外,还有⼀些常见拦截路径设置:

拦截路径含义举例
/*⼀级路径能匹配/user,/book,/login,不能匹配/user/login
/**任意级路径能匹配/user,/user/login,/user/reg
/book/*/book下的⼀级路径能匹配/book/addBook,不能匹配/book/addBook/1,/book
/book/**/book下的任意级路径能匹配/book,/book/addBook,/book/addBook/2,不能匹配/user/login

以上拦截规则可以拦截此项目中的使用URL,包括静态文件(图片文件,JS和CSS等文件).

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go框架三件套:Gorm的基本操作

1.概述 这里的Go框架三件套是指 Web、RPC、ORM框架,具体如下: Gorm框架 gorm框架是一个已经迭代了10年的功能强大的ORM框架,在字节内部被广泛使用并且拥有非常丰富的开源扩展。 Kitex框架 Kitex是字节内部的Golang微服务RPC框架,具有高性能…

初始Django

初始Django 一、Django的历史 ​ Django 是从真实世界的应用中成长起来的,它是由堪萨斯(Kansas)州 Lawrence 城中的一个网络开发小组编写的。它诞生于 2003 年秋天,那时 Lawrence Journal-World 报纸的程序员 Adrian Holovaty 和…

泽攸科技无掩模光刻机:引领微纳制造新纪元

在当今科技迅猛发展的时代,微纳制造技术正变得越来越重要。泽攸科技作为这一领域的先行者,推出了其创新的无掩模光刻机,这一设备在微电子制造、微纳加工、MEMS、LED、生物芯片等多个高科技领域展现出了其独特的价值和广泛的应用前景。 技术革…

ubuntu中安装sublime-text

安装sublime-text 直接在software软件下载就好 安装成功后,如果找不到的话,可以在这里搜索。而后添加到收藏文件夹中。 下载的时候发生报错,发现是没有安装 ca-certificates 的软件包 : 命令: sudo apt install ca-c…

【NodeMCU实时天气时钟温湿度项目 6】解析天气信息JSON数据并显示在 TFT 屏幕上(心知天气版)

今天是第六专题,主要内容是:导入ArduinoJson功能库,借助该库解析从【心知天气】官网返回的JSON数据,并显示在 TFT 屏幕上。 如您需要了解其它专题的内容,请点击下面的链接。 第一专题内容,请参考&a…

uniapp小程序:大盒子包裹小盒子但是都有点击事件该如何区分?

在开发过程中我们会遇到这种情况,一个大盒子中包裹这一个小盒子,两个盒子都有点击事件,例如: 这个时候如果点击评价有可能会点击到它所在的大盒子,如果使用css中的z-index设置层级的话如果页面的盒子多的话会混乱&…

AI工具的热门与卓越:揭示AI技术的实际应用和影响

文章目录 每日一句正能量前言常用AI工具创新AI应用个人体验分享后记 每日一句正能量 我们在我们的劳动过程中学习思考,劳动的结果,我们认识了世界的奥妙,于是我们就真正来改变生活了。 前言 随着人工智能(AI)技术的快…

极端天气对气膜建筑有什么影响吗—轻空间

气膜建筑在近年来的发展迅速,逐渐替代了一部分传统建筑,展现了良好的市场前景。然而,面对自然环境中的极端天气,如暴风、暴雨和暴雪,气膜建筑是否能够经受住考验是大家关注的焦点。轻空间带您探讨一下这些极端天气对气…

【漏洞复现】泛微OA E-Cology ResourceServlet文件读取漏洞

漏洞描述: 泛微OA E-Cology是一款面向中大型组织的数字化办公产品,它基于全新的设计理念和管理思想,旨在为中大型组织创建一个全新的高效协同办公环境。泛微OA E-Cology ResourceServlet存在任意文件读取漏洞,允许未经授权的用户…

Nurbs曲线

本文深入探讨了Nurbs曲线的概念、原理及应用,揭示了其在数字设计领域的独特价值和广泛影响。Nurbs曲线作为一种强大的数学工具,为设计师们提供了更加灵活、精确的曲线创建方式,从而极大地提升了设计作品的质感和表现力。文章首先介绍了Nurbs曲…

大数据之 Hadoop概述

用最简洁的语言跟大家表达我最想分享的知识 。 什么是Hadoop Hadoop框架核心模块 HDFS MapReduce Yarn Hive HBase Phoenix Zookeeper Impala Spark 分布式计算-Spark与Impala与Presto与Tez 今天主要跟大家简述一下hadoop,主要是图片的形式跟大家介绍,希…

Rpcx (二):传输

一、Transport 传输 rpcx 可以通过 TCP、HTTP、UnixDomain、QUIC和KCP通信。你也可以使用http客户端通过网关或者http调用来访问rpcx服务。 TCP 这是最常用的通信方式。高性能易上手。可以使用TLS加密TCP流量。 Example: 101basic 服务端使用 tcp 做为网络名并且在注册中心…

稚晖君独家撰文:具身智能即将为通用机器人补全最后一块拼图

具身智能新纪元。 *本文为稚晖君独家供稿,「甲子光年」经智元机器人授权发布。稚晖君本名彭志辉,先后任职OPPO、华为,现为智元机器人CTO、首席架构师。 在ChatGPT之后,又一个大模型概念火了——具身智能(Embodied AI)。 在学术界,图灵奖得主、上海期智研究院院长姚期…

IOS 苹果IAP(内购)之创建沙盒账号

IOS 苹果IAP(内购)之创建沙盒账号 沙盒账号是什么?沙盒账号创建的前提条件沙盒账号创建沙盒账号使用流程沙盒账号注意事项 沙盒账号是什么? 如果IOS应用里面用到了苹果应用内付费(IAP)功能,那么…

办公软件_EdrawMax 免安装版教程 (亿图图示综合图形图表设计软件)

前言 万兴亿图图示(Wondershare EdrawMax)是一款综合图形图表设计软件,Visio国产替代.亿图图示中文版(Edraw Max)是一款办公绘图软件的思维导图软件.无需任何绘图功底,即可轻松创建各类思维导图.亿图图示专家,提供大量事例和在线模板,用于创建流程图,信息图,组织结构图,科学教…

面试题:调整数字顺序,使奇数位于偶数前面

题目: 输入一个整数数组,实现一个函数,来调整该数组中数字的顺序 使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分 算法1: 利用快速排序的一次划分思想,从2端往中间遍历 时间复杂度&#x…

day5

利用迭代器&#xff01; #include <vector> #include <map>class Solution { public:std::vector<int> intersection(std::vector<int>& nums1, std::vector<int>& nums2) {std::map<int, int> Mymap;std::vector<int> qq…

金万维动态域名小助手怎么用?

金万维动态域名小助手是一个域名检测工具&#xff0c;使用此工具可以进行检测域名解析是否正确、清除DNS缓存、修改DNS服务器地址及寻找在线客服&#xff08;仅支持付费用户&#xff09;等操作。对不懂网络的用户是一个很好的检测域名的工具&#xff0c;下面我就讲解一下金万维…

面试中的算法(查找缺失的整数)

在一个无序数组里有99个不重复的正整数&#xff0c;范围是1~100&#xff0c;唯独缺少1个1~100中的整数。如何找出这个缺失的整数? 一个很简单也很高效的方法&#xff0c;先算出1~100之和&#xff0c;然后依次减去数组里的元素&#xff0c;最后得到的差值&#xff0c;就是那个缺…

ARM架构安全特性之通用平台安全服务

安全之安全(security)博客目录导读 目录 一、符合PSA认证标准 二、Arm平台安全规范 三、跨安全边界通信 四、FF-A 五、FF-M 六、开放和标准设备固件 七、Trustedfirmware.org 在一个需要高度信任设备的世界中&#xff0c;每个设备都必须是独一无二的可识别的、不可克隆…