、SpringBoot2.X自定义拦截器实战及新旧配置对比(核心知识)
简介: 讲解拦截器使用,Spingboot2.x新版本配置拦截拦截器和旧版本SpringBoot配置拦截器区别讲解
一、@Configuration
继承WebMvcConfigurationAdapter(SpringBoot2.X以前旧版本)
SpringBoot2.X 新版本配置拦截器 implements WebMvcConfigurer
二、自定义拦截器 HandlerInterceptor
preHandle:调用Controller某个方法以前
postHandle:Controller以后调用,视图渲染以前,若是控制器Controller出现了异常,则不会执行此方法
afterCompletion:无论有没有异常,这个afterCompletion都会被调用,用于资源清理
三、按照注册顺序进行拦截,先注册,先被拦截
拦截器不生效常见问题:
1)是否有加@Configuration
2)拦截路径是否有问题 ** 和 *
3)拦截器最后路径必定要 “/**”, 若是是目录的话则是 /*/
Filter
是基于函数回调 doFilter(),而Interceptor则是基于AOP思想
Filter在只在Servlet先后起做用,而Interceptor够深刻到方法先后、异常抛出先后等
依赖于Servlet容器即web应用中,而Interceptor不依赖于Servlet容器因此能够运行在多种环境。
在接口调用的生命周期里,Interceptor能够被屡次调用,而Filter只能在容器初始化时调用一次。
Filter和Interceptor的执行顺序
过滤前->拦截前->action执行->拦截后->过滤后java
自定义一个拦截器 新旧版本的区别
以前的代码测试会对当前的测试 有干扰,因此先注释掉。
旧版本的,继承WebMvcConfigurerAdapter
能够去重写里面的方法
web
java8支持接口里面有默认方法的实现
实现接口WebMvcConfigurer。重写里面的方法,addInterceptors
定义login的拦截器
有三个方法须要重写
例如能够在进入controller以前验证token的值
注册刚才加的LoginInterceptor。并制定拦截的路径
拦截的路径
controller的测试方法
启动测试
旧的拦截器先注释掉。注解去掉就不会被Spring扫描了
从新启动测试
访问返回一个json格式的数据
输出的方法名改一下
输出的requestDestoryed是咱们以前定义的监听器
注解拦截器注意的地方。要么是类上面没加注解,要么就是拦截的路径设置的有问题
拦截的路径通常子在结尾的时候加** 表示全部的。/*是匹配子文件夹
拦截全部能够配置为/**
能够链式调用排除的拦截路径exclude
不拦截的配置
json
两个拦截器怎么去注册呢?
写另一个拦截器
注册拦截器,这样就会先执行第一个拦截器,再执行第二个拦截器
启动应用
请求接口
函数
Filter
是基于函数回调 doFilter(),而Interceptor则是基于AOP思想
Filter在只在Servlet先后起做用,而Interceptor够深刻到方法先后、异常抛出先后等
依赖于Servlet容器即web应用中,而Interceptor不依赖于Servlet容器因此能够运行在多种环境。
在接口调用的生命周期里,Interceptor能够被屡次调用,而Filter只能在容器初始化时调用一次。
Filter和Interceptor的执行顺序
过滤前->拦截前->action执行->拦截后->过滤后
post