当前位置: 首页 > article >正文

再论Spring MVC中Filter和HandlerInterceptor的优先级

在Spring MVC中,Filter和HandlerInterceptor的执行顺序及优先级如下:


1. 执行顺序与优先级

  • Filter(Servlet规范)的优先级高于 HandlerInterceptor(Spring MVC框架)。

  • 请求处理流程

    1. Filter链:所有配置的Filter按顺序处理请求(在请求进入DispatcherServlet之前)。
    2. DispatcherServlet:请求到达Spring MVC核心控制器。
    3. HandlerInterceptor:通过preHandle方法介入请求(在Controller方法调用前)。
  • 响应处理流程

    1. HandlerInterceptorpostHandle(Controller执行后,视图渲染前)和afterCompletion(请求完全结束后)。
    2. Filter链:按逆序处理响应(从最后一个Filter回到第一个)。

2. 详细执行流程

HTTP请求
    → Filter1 → Filter2 → ... → FilterN
    → DispatcherServlet
        → HandlerInterceptor1.preHandle()
        → HandlerInterceptor2.preHandle()
        → Controller方法
        → HandlerInterceptor2.postHandle()
        → HandlerInterceptor1.postHandle()
        → 视图渲染(如存在)
        → HandlerInterceptor2.afterCompletion()
        → HandlerInterceptor1.afterCompletion()
    ← FilterN处理响应(逆序) ← ... ← Filter1处理响应

3. 配置顺序的影响

  • Filter顺序
    • web.xml中按配置顺序执行(或通过FilterRegistrationBeanorder属性)。
  • HandlerInterceptor顺序
    • 通过InterceptorRegistry添加的顺序决定:
      • preHandle:按注册顺序执行。
      • postHandleafterCompletion:按注册逆序执行。

4. 关键区别

特性FilterHandlerInterceptor
规范/框架Servlet规范Spring MVC框架
作用范围所有请求(包括静态资源)Spring管理的Controller请求
访问Spring上下文无法直接访问可以直接访问Spring Bean
控制粒度更底层(请求/响应预处理)更贴近业务逻辑(如Controller前后处理)

5. 使用场景

  • Filter:处理与业务无关的通用逻辑(如编码设置、日志记录、跨域处理)。
  • HandlerInterceptor:处理与业务相关的逻辑(如权限校验、参数预处理)。

通过理解两者的优先级和执行顺序,可以更灵活地设计请求处理逻辑。


http://www.kler.cn/a/560696.html

相关文章:

  • 工具方法 - 合规性矩阵
  • 登录-10.Filter-登录校验过滤器
  • 【Python爬虫(64)】从“听”开始:Python音频爬虫与语音数据处理全解析
  • 微信小程序——访问服务器媒体文件的实现步骤
  • 考研/保研复试英语问答题库(华工建院)
  • 网络安全-Mysql注入知识点
  • java基础面试-Java 内存模型(JMM)相关介绍
  • 《深度剖析Linux 系统 Shell 核心用法与原理_666》
  • [AI相关]问问DeepSeek如何基于Python,moviePy实现视频字幕功能
  • Java 新手宝典(带案例)
  • 点击修改按钮图片显示有问题
  • stm32-电源控制
  • 深入理解与实战SQL IFNULL()函数
  • 深入理解 QVectorQString:Qt 中动态数组的强大力量
  • FFmpeg进化论:从av_register_all手动注册到编译期自动加载的技术跃迁
  • 深入剖析:基于红黑树实现自定义 map 和 set 容器
  • 零工市场小程序利用 Java 连接企业与自由职业者?
  • Matlab Simulink创建Clark和Park变换模型
  • 开源测试_POmronFINSTCP
  • check spring configuration解决方法