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

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