在 Spring MVC 中使用 Filter
Filter 是 Servlet 规范中定义的接口,可以在 Spring MVC 框架中使用
- 第一步:引入 servlet 依赖
- 第二步:定义 Filter
- 第三步:请求接口
Spring MVC 拦截器 - Interceptor
Spring MVC 提供了拦截器 Interceptor,对请求进行拦截处理,作用类似 Servlet 的 Filter
- 第一步:定义拦截器
- 第二步:配置拦截器
- 第三步:请求接口
如果 preHandle 返回 false,那么请求不会被放行,Controller 层方法不会被执行
Filter 和 Interceptor 的执行顺序
- Filter before
- Interceptor preHandle
- 目标方法
- Interceptor postHandle
- Interceptor afterCompletion
- Filter after
Filter 如果使用 @WebFilter 注解方式无法指定执行顺序
Interceptor 使用 order 指定执行顺序
Filter 和 Interceptor 的区别
- Filter 是 Servlet 规范定义的接口,Interceptor 是 Spring MVC 定义的接口
- Filter 不被 Spring IoC 容器管理,被 Web 容器管理
- Interceptor 是被 Spring IoC 容器管理 的 bean,可以注入并使用 Spring IoC 容器中的其他 bean
Spring MVC 中请求的生命周期
SpringMVC主流程主要有三个阶段:
- 处理器映射阶段(HandlerMapping):通过解析url中的路径来找到对应的处理链(包含处理器和拦截器)
- 处理器适配阶段(HandlerAdapter):通过解析请求中的参数来适配处理器,并执行处理器
- 视图解析阶段(ViewResolver):如果处理器返回的是逻辑视图,那么会在这个阶段绘制成可展示的视图
DispatcherServlet 统筹整个流程。