拦截器(详解)

拦截器是啥?

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

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

大白话

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

相关推荐
柒.梧.17 小时前
Spring Boot集成JWT Token实现认证授权完整实践
java·spring boot·后端
l1t17 小时前
格式化SQL工具pg_prettify
数据库·sql
奔波霸的伶俐虫17 小时前
redisTemplate.opsForList()里面方法怎么用
java·开发语言·数据库·python·sql
Bug.ink17 小时前
BUUCTF——WEB(6)
数据库·sql·网络安全·靶场·buuctf
自在极意功。17 小时前
简单介绍SpringAOP
java·spring·aop思想
梵得儿SHI17 小时前
(第七篇)Spring AI 核心技术攻坚:国内模型深度集成与国产化 AI 应用实战指南
java·人工智能·spring·springai框架·国产化it生态·主流大模型的集成方案·麒麟系统部署调优
2301_8002561117 小时前
E/R 图(实体 - 联系图)转换为关系模式(数据库表结构)的核心规则
数据库·oracle
合方圆~小文17 小时前
工业摄像头工作原理与核心特性
数据库·人工智能·模块测试
jmxwzy17 小时前
Redis
数据库·redis·缓存