- 联系方式: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 # 拦截器 # 区别