Spring 常用的三种拦截器详解
前言
在开发过程中,我们常常使用到拦截器来处理一些逻辑。最常用的三种拦截器分别是 AOP、 Interceptor 、 Filter,但其实很多人并不知道什么时候用 AOP,什么时候用 Interceptor,什么时候用 Filter,也不知道其拦截顺序,内部原理。今天我们详细介绍一下这三种拦截器。
拦截器顺序
我们现在有一个 controller 接口,叫做 test,现在我们在项目有定义了三个拦截器,其顺序如下
Filter(before) > Interceptor(before) > AOP(before) > test 方法 > AOP(after) > Interceptor(after) > Filter(after)
具体流程如下两幅图片。
所以有时候我们使用不了 AOP/Interceptor, 只能使用 Filter。
比如我们现在是一个 Get 请求,但是别人却发送了一个 Post 请求,这时候只有 Filter 才能拦截,只能使用 Filter.
又比如我们在 Interceptor 获取了请求参数以后,因为是一个流,后面 controller 就会获取不到,我们一般会采用包装类来实现重复读取。但假如我们直接使用 AOP 就完全可以避免这个问题了。
类似的例子比较多,所以我们应该知其然,也要知其所以然。下面我们介绍一下三种拦截器的具体用法。
Filter 拦截器
filter 是 servlet 层面的提供拦截器,和 spring 无关。只是说现在 spring/springboot 一统江湖,很多项目在 spring 的基础上面使用 filter。那我们如果在 spring 项目中使用 filter 拦截器呢
输出结果
FirstFilter before doFilter
SecondFilter before doFilter
Interceptor 拦截器
Interceptor 是 springmvc 给我们提供的拦截器,只有在 sotingmvc 中才可以使用
输出结果
FirstInterceptor preHandle
SecondInterceptor preHandle
AOP 拦截器
AOP 是我们非常常用的拦截器,织入点,有 before,after,around 等,我们今天以 around 为例
最后
我们介绍了一下 spring 中,常用的三种拦截器,以及他们在 springboot 中如何使用。
最后给大家出一个小作业,如果把上面三个拦截器放到一个项目中,他会输出什么顺序呢?
文章转载自:程序员博博
评论