拦截器机制
前端发送请求,通过控制器完成定义好的方法,在将数据渲染到前端。拦截器分为三个方法分别是preHandle、postHandle、afterCompletion,我们可以分别利用这三个方法在控制器作用前、后以及数据渲染完成之后将流程拦截,来进行自定义好的操作(比如放行那些请求、加某些数据)
- 步骤:
1.创建用于存放拦截器的包,一般命名为interceptor
2.创建类,类中重写三个方法,需要实现HandlerInterceptor接口(这个类就是拦截器)
3.按照需求在方法中书写代码(逻辑判断等)
4.拦截器在定义好之后,要让拦截器进行工作- 1.配置好拦截器要拦截的请求
- 2.把配置放到容器当中
- 3.指定拦截规则
创建配置类,用于进行第4步中的操作
- 1.配置类实现WebMvcConfigurer的抽象方法
- 2.在重写方法中利用addInterceptor()方法将前面创建的拦截器类放置到容器当中
- 3.利用addPathpatterns()方法声明需要拦截那些请求,如,addPathpatterns("/")就代表拦截所有请求,包括了静态资源的请求,这就意味着页面的渲染也会被拦截**
- 4.利用excludePathPatterns()方法声明需要放行那些请求,如,excludePathPatterns("/","/login")就代表放行/以及/login请求
为了解决3中的问题,我们可以通过两种方式:- 1.在excludePathPatterns()中将static中的包,都以"/包名/"的方式放行;例如static中有一个school包,这个包下方了很多静态资源,那么我们可以excludePathPatterns("/school/"),但包多的时候就会声明太多次
- 2.或者将静态资源的访问路径进行配置,比如前面必须有static,那么就可以直接放行static路径下的所有"/static/**"