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