拦截器(详解)

拦截器是啥?

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

在获取图书列表的时候,我们写了一个验证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方法,这里主要就是把你自己实现的拦截器放进来,然后把你要拦截的,放行的写进去,这样自定义的拦截器才知道要拦截什么,什么不拦截

大白话

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

相关推荐
nice_lcj5207 小时前
【从零理解 Spring AI · 14】RAG 的四个环节:加载、切分、向量化、检索
java·spring boot·embedding·向量数据库·rag·spring ai·ai应用开发
学长毕设9 小时前
基于springboot科创竞赛信息平台-附源码
java·spring boot·后端
学长毕设10 小时前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端
SelectDB10 小时前
让变更流出 Doris:Apache Doris 5.0 基于增量计算的 CDC 技术解析
数据库
这个DBA有点耶10 小时前
MCP隔离层+行级语义审计+输出校验:AI访问数据库的安全边界拆解
数据库·人工智能·ai编程
这个DBA有点耶11 小时前
从反向扫描O(n)到正向扫描O(1):降序索引的物理机制与混合排序匹配规则
数据库
2501_9339232512 小时前
解读Redis:单线程模型
数据库·redis·缓存
AI开源软件13 小时前
SpringBoot3+AI Agent 智能报销:怎样把对话接进现有财务审批系统
spring boot·ai agent·人工确认·ruoyi office·agentos·智能报销·财务审批
学长毕设13 小时前
基于SpringBoot的高校后勤报修管理系统-附源码
java·spring boot·后端
Tapdata14 小时前
被忽略的第三类上下文:Agent 进入真实业务后,还缺什么?
数据库·人工智能·架构