news 2026/9/3 5:39:41

ssm-拦截器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ssm-拦截器

一.拦截器简介

1.拦截器概念

拦截器(Interceptor) 是一种用于在请求处理的生命周期中对请求进行拦截的机制。在 Spring MVC 中,拦截器可以在请求到达控制器之前或响应返回给客户端之前对请求和响应做一些处理操作。

2.拦截器作用

拦截器的作用是对请求进行预处理和后处理,它可以执行以下操作:

(1)请求预处理(Pre-processing)

在请求到达控制器之前,拦截器可以进行一些操作,比如记录日志、检查权限、进行参数验证等。它可以决定是否继续执行控制器方法,如果不允许执行,可以直接返回响应或者抛出异常。

(2)请求后处理(Post-processing)

在请求处理完成(即控制器方法执行完毕)后,拦截器可以对响应进行处理,比如修改响应数据、统计性能等。拦截器可以在控制器返回数据之后,进行一些额外的操作,比如修改返回的视图数据、给响应数据添加自定义的字段等。

(3)统一处理

拦截器通常用于一些通用的处理,比如权限校验、日志记录等,避免在每个控制器中都编写重复的代码。

3.执行时机

(1)前置处理(Pre-handle)

(2)控制器方法执行(Controller)

(3)后置处理(Post-handle)

(4)视图渲染(After completion)

二.拦截器入门案例

1.配置方式

(1)通过WebMvcConfigurer实现的配置

这个类实现了WebMvcConfigurer接口,并重写了addInterceptors方法,配置了两个拦截器ProjectInterceptorProjectInterceptor2addPathPatterns方法指定了哪些请求会被拦截,这里是/books路径及其子路径(如/books/1,/books/2等)。

(2)通过WebMvcConfigurationSupport实现的配置

这个类继承自WebMvcConfigurationSupport,同样通过重写addInterceptors来配置拦截器,这种方式相较于WebMvcConfigurer更具侵入性,但它提供了更多的灵活性。

2.具体的拦截器类

(1)ProjectInterceptor

ProjectInterceptor实现了HandlerInterceptor接口,定义了三个方法:preHandle(HttpServletRequest request, HttpServletResponse response, Object handler):在请求处理之前调用。返回true表示继续执行后续拦截器和控制器方法,返回false表示中止请求。

postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView):在控制器方法执行后,视图渲染之前调用。此时可以修改ModelAndView对象。

afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex):在整个请求处理完毕,视图渲染后调用。可以做一些资源清理等工作。

preHandle方法中,我们获取了请求的Content-Type头部信息,并打印出来。

(2)ProjectInterceptor2

ProjectInterceptor2ProjectInterceptor类似,不同之处在于它的preHandle方法返回了false,这意味着请求在执行到控制器方法之前就会被拦截并终止,不会继续执行控制器方法。

3.执行顺序

Spring MVC 中的多个拦截器按配置的顺序执行:

(1)执行顺序

在请求到达控制器方法之前,拦截器会按照配置顺序执行preHandle方法。

如果其中一个拦截器的preHandle返回false,则后续拦截器的preHandle和控制器方法都不会执行,直接返回响应。

如果所有的preHandle都返回true,则执行控制器方法。

控制器方法执行后,按配置的顺序执行postHandle方法。

最后,执行afterCompletion方法。

(2)多拦截器执行流程

  1. 请求到达前

    • ProjectInterceptorpreHandle被调用并返回true

    • ProjectInterceptor2preHandle被调用并返回false,这会终止请求。

  2. 控制器方法未执行

    • 由于ProjectInterceptor2preHandle返回false,控制器方法不会被执行,因此postHandleafterCompletion也不会被调用。

4.总结

在 Spring MVC 中,拦截器用于在请求处理过程中插入自定义逻辑。拦截器类实现HandlerInterceptor接口,主要包含三个方法:preHandle(请求到达控制器之前),postHandle(控制器方法执行后,视图渲染前),和afterCompletion(整个请求处理完成后)。通过配置类中的addInterceptors方法,多个拦截器可以按照配置顺序依次执行。preHandle方法返回true继续执行请求,返回false则中止请求。拦截器可以用于日志记录、权限验证等场景。多个拦截器的执行顺序是按照注册顺序进行的,且如果某个拦截器的preHandle返回false,后续拦截器和控制器方法将不会执行。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 13:49:57

Z-Image-Turbo部署教程:结合argparse实现命令行灵活调用

Z-Image-Turbo部署教程:结合argparse实现命令行灵活调用 1. 为什么选择Z-Image-Turbo?开箱即用的文生图体验 你有没有遇到过这样的情况:好不容易找到一个看起来很厉害的AI图像生成模型,结果第一步就是“下载30GB权重”——然后等…

作者头像 李华
网站建设 2026/9/3 1:37:35

R语言Shiny应用发布实战(新手避坑宝典)

第一章:Shiny应用发布入门与核心概念 在构建交互式Web应用时,Shiny为R语言用户提供了一套简洁高效的开发框架。将Shiny应用从本地环境部署到公网,是实现数据产品化的重要一步。理解其发布机制与核心组件,有助于规避常见问题并提升…

作者头像 李华
网站建设 2026/9/2 23:54:34

安科瑞液冷储能一体机:为工商业储能打造的全场景“智慧能量舱”

在工商业用电成本不断攀升、电网稳定性要求日益提高的今天,如何构建一套高效、可靠、经济的自主能源系统,成为众多企业管理者思考的命题。传统储能方案往往面临集成度低、散热不佳、部署复杂、运维困难等挑战。安科瑞全新推出的 125kW/261kWh 液冷户外储…

作者头像 李华
网站建设 2026/9/2 22:10:53

Unsloth开源框架优势解析:为何它能降低70%显存占用?

Unsloth开源框架优势解析:为何它能降低70%显存占用? 1. Unsloth到底是什么?不是又一个“套壳工具” 很多人第一次看到Unsloth,会下意识觉得:“哦,又一个LLM微调库?”——但事实远不止如此。Un…

作者头像 李华
网站建设 2026/9/3 3:41:00

一次 JVM Full GC 排查全过程

一、问题背景 某天下午,运维收到生产环境告警:某业务系统的定时任务服务 CPU 使用率飙升至 90%,服务响应变慢,部分定时任务执行超时。 告警信息: [ALERT] xxx-schedule 服务 CPU 使用率 92.3% [ALERT] xxx-schedule …

作者头像 李华