- 联系方式:1761430646@qq.com
- 编写时间:2022年12月5日21:20:19
- 博客地址:www.zeroeden.cn
- 菜狗摸索,有误勿喷,烦请联系
1. 使用
-
默认已经搭建好了
SpringBoot
环境
1.1 SpringBoot 整合 Filter
-
编写一个过滤器实现
Filter
接口并且实现其方法,然后生成Bean
即可 -
方法说明:
-
init()
:生成过滤器时执行的一些初始化动作 -
doFilte()
:执行的过滤逻辑处理- 调用过滤器链filterChain的
doFilter()
方法即可将请求放行进入到下一个阶段 - 在
filterChain.doFilter()
后的代码为在响应传回客户端前经过过滤器时的一些处理逻辑(比如说可以设置字符串编码之类的)
- 调用过滤器链filterChain的
-
destroy()
:过滤器销毁时执行的一些操作
-
-
执行流程–发送请求访问控制层的方法
1.2 SpringBoot 整合 Interceptor
-
编写一个拦截器类实现
HandlerInterceptor
接口,并且重写接口中的方法,接着生成Bean
-
最后在实现
WebMvcConfigurer
接口的配置类中在对应方法上添加拦截器并配置拦截路径 -
方法说明
preHandle()
:在进入到控制层方法执行之前做的一些逻辑处理(返回值为true
则放行,false
则被拦截掉)postHandle()
:在控制层方法执行完后做的一些逻辑处理afterCompletion()
:在视图渲染后做的一些处理
-
执行流程–发送请求访问控制层的方法
2. 区别
-
"出身"不同-过滤器
Filter
来自Servlet
,而拦截器Interceptor
来自Spring
-
支持的项目类型不同
- 由于过滤器是
Servlet
规范中定义的,所以过滤器依赖Servlet
容器,只能用在Web
项目中 - 而拦截器是
Spring
框架的其中一个组件,Spring
框架本身不仅只限于运用在Web
项目中,所以拦截器还可以运行在Application
或Swing
程序中
- 由于过滤器是
-
触发时机不同
-
如下是
Filter
与Interceptor
都配置时的执行流程 -
请求执行过程如下图(暂时不理
Interceptor
的afterCompletion()
方法) -
小结
-
也就是请求会先到
Filter
–>然后到Interceptor
–>最后到Controller
-
响应回来时同理
-
网上常挂上的一张图
-
-
-
使用业务场景不同
- 从上面可以知道,请求会先达到
Filter
,然后才是Interceptor
- 也就是说
Filter
离Controller
比较远,Interceptor
离Controller
比较近,更接近业务系统 - 所以,
Interceptor
主要是用来实现项目中的业务判断的,比如【登录、权限判断】、【日志记录】等 - 而
Filter
主要是用来实现通过功能过滤的,比如【敏感词过滤】、【字符集编码设置】等
- 从上面可以知道,请求会先达到
-
实现原理不同
Filter
是基于方法回调实现的Interceptor
是基于反射(动态代理)实现的
# Spring # SpringBoot # 过滤器 # Filter # Interceptor # 拦截器 # 区别