拦截器(详解)

拦截器是啥?

拦截器,就是用来拦截请求的,只有满足预设的代码才能访问对应的接口

在获取图书列表的时候,我们写了一个验证session的,只有登录才可以进行操作,但是这个只对获取图书列表生效,我们不只有这一个获取图书列表,我们还有增删改查,总不可能每一个都写一遍吧,那很累了

所以我们把这个共性的代码给抽离出去,变成公用的-拦截器

拦截器

定义拦截器

首先需要实现HandlerInterceptor接口,然后重写里面的方法

需要重写三个接口

Prehandle表示的是在方法执行之前启动的

Posthandle表示的是方法执行之后启动的

Aftercompletion表示的是当画面渲染好之后启动的(不常用)

注册配置拦截器

实现WebMvcConfigurer接⼝,并重写addInterceptors⽅法,在add中加入你之前自定义的拦截器即可,addpath部分加入的是拦截的访问,/**表示全部拦截

拦截

如果改为false,我们访问任何的资源都会被拦截,无法继续执行到下一步,只有是true的时候,才会被允许访问

这里的addpathpatterns表示的是拦截/**表示拦截的所有

Excludepathpatterns表示的是不拦截的

常见的拦截

拦截器执行过程

原本

用户 controller service mapper 数据库

加了拦截器

用户 拦截器 controller service mapper 数据库

加了拦截器,就会在执行controller执行之前,执行prehandle方法,返回false就会被拦截,返回true才可以继续执行

当返回true之后,就会执行posthandle方法,然后再执行aftercompletion方法,然后返回数据

举例

当我设置这个拦截器之后,如果有访问来了,这个时候他需要先经过我的拦截器的prehandle里面的代码,如果验证通过,那么就会可以访问,验证失败就会显示用户未登录

这里负责的是拦截请求的名单,负责把需要拦截的,不拦截的全部记下来,和前面的自定义的拦截器的验证代码进行配合

举例

当未登录去访问内部的东西

被拦截器拦截,只有登录之后获得session才可以对看到数据和对数据进行操作

成功

先登录之后,获得session之后才可以访问内部的资源

总结

拦截器的存在,是为了保护我们后端的安全,同时也是把我们每个部分都需要写的重复验证代码给提取出来,封装,让我们可以直接使用

逻辑

定义拦截器

实现我们自己需要拦截的逻辑

首先需要一个类去继承HandlerInterceptor接⼝,并重写其所有⽅法,这里的方法分为三个,一个是pre(执行代码前),一个是post(执行代码后),一个是after(渲染结束后),只有当pre里面我们写的代码执行成功之后,返回一个true,才会执行其他的下一步操作

注册配置拦截器

使用什么拦截器,拦截什么,什么不拦截

首先需要一个类去实现实现WebMvcConfigurer接⼝,并重写addInterceptors⽅法和excludePathPatterns方法,这里主要就是把你自己实现的拦截器放进来,然后把你要拦截的,放行的写进去,这样自定义的拦截器才知道要拦截什么,什么不拦截

大白话

这两个是相互配合的,一个负责的是验证什么,怎么验证,一个负责的是哪些需要验证,哪些不需要验证

相关推荐
蜡笔小炘4 小时前
LVS -- 利用防火墙标签(FireWall Mark)解决轮询错误
服务器·数据库·lvs
韩立学长4 小时前
基于Springboot泉州旅游攻略平台d5h5zz02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·旅游
晚霞的不甘4 小时前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
摇滚侠4 小时前
在 SpringBoot 项目中,开发工具使用 IDEA,.idea 目录下的文件需要提交吗
java·spring boot·intellij-idea
Re.不晚4 小时前
MySQL进阶之战——索引、事务与锁、高可用架构的三重奏
数据库·mysql·架构
老邓计算机毕设5 小时前
SSM智慧社区信息化服务平台4v5hv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·智慧社区、·信息化平台
麦聪聊数据5 小时前
为何通用堡垒机无法在数据库运维中实现精准风控?
数据库·sql·安全·低代码·架构
2301_790300965 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
寄存器漫游者5 小时前
Linux 软件编程 - IO 编程
linux·运维·spring
m0_736919105 小时前
用Pandas处理时间序列数据(Time Series)
jvm·数据库·python