Spring MVC中自定义拦截器的实例讲解

发布时间 - 2026-01-11 02:55:05    点击率:

1. 引言

拦截器(Interceptor)实现对每一个请求处理前后进行相关的业务处理,类似于Servlet的Filter。

我们可以让普通的Bean实现HandlerIntercpetor接口或继承HandlerInterceptorAdapter类来实现自定义拦截器。

通过重写WebMvcConfigurerAdapter的addIntercetors方法来注册一个计算每一次请求的处理时间的拦截器。

2. 自定义拦截器的实现

2.1 定义拦截器

新建LogInterceptor类,并继承HandlerInterceptorAdapter类,重写preHandle、postHandle这两个方法。

1.preHandle方法表示在请求发生前执行,内容如下:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
request.setAttribute("begin", System.currentTimeMillis());
return true;
}

2.postHandle方法表示在请求完成后执行,内容如下:

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
 ModelAndView modelAndView) throws Exception {
long begin = (long)request.getAttribute("begin");
request.removeAttribute("begin");
long end = System.currentTimeMillis();
System.out.println("本次请求消耗时间为:"+new Long(end-begin)+"ms");
}

2.2 配置拦截器

2.2.1 使用xml配置

1.在配置文件中添加支持MVC的schema

xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation=" http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"

2.使用mvc:interceptors标签声明拦截器

<mvc:interceptors> 
<!-- 使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求 --> 
<bean class="org.aming.demo.springmvc.interceptor.LogInterceptor"/> 
<mvc:interceptor> 
 <mvc:mapping path="${指定的URL}"/> 
 <!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 --> 
 <bean class="${其他拦截器}"/> 
</mvc:interceptor> 
</mvc:interceptors> 

说明:没有测试过!!!

2.2.2 使用JavaConfig配置

3.配置拦截器的Bean

@Bean
public LogInterceptor logInterceptor() {
 return new LogInterceptor();
}

4.重写addInterceptors方法,注册拦截器

@Override
public void addInterceptors(InterceptorRegistry registry) {
 registry.addInterceptor(logInterceptor());
}

说明:配置类需要继承WebMvcConfigurerAdapter类

3. 运行结果

以上这篇Spring MVC中自定义拦截器的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# 自定义拦截器  # SpringMVC自定义拦截器登录检测功能的实现代码  # SpringMvc自定义拦截器(注解)代码实例  # SpringMVC自定义拦截器实现过程详解  # Java SpringMVC实现自定义拦截器  # 拦截器  # 自定义  # 重写  # 给大家  # 我们可以  # 这两个  # 希望能  # 时间为  # 这篇  # 来实现  # 类似于  # 方法来  # 生前  # 小编  # 配置文件  # 大家多多  # 完成后  # xhtml  # public  # boolean 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: JavaScript如何操作视频_媒体API怎么控制播放  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  Python文件操作最佳实践_稳定性说明【指导】  公司网站制作需要多少钱,找人做公司网站需要多少钱?  音响网站制作视频教程,隆霸音响官方网站?  Android自定义listview布局实现上拉加载下拉刷新功能  原生JS实现图片轮播切换效果  想要更高端的建设网站,这些原则一定要坚持!  如何快速搭建二级域名独立网站?  🚀拖拽式CMS建站能否实现高效与个性化并存?  如何正确下载安装西数主机建站助手?  linux top下的 minerd 木马清除方法  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  JavaScript如何实现倒计时_时间函数如何精确控制  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  网站制作免费,什么网站能看正片电影?  什么是javascript作用域_全局和局部作用域有什么区别?  b2c电商网站制作流程,b2c水平综合的电商平台?  HTML 中动态设置元素 name 属性的正确语法详解  如何撰写建站申请书?关键要点有哪些?  微信小程序 HTTPS报错整理常见问题及解决方案  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  深圳网站制作培训,深圳哪些招聘网站比较好?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  Android中AutoCompleteTextView自动提示  微信小程序 input输入框控件详解及实例(多种示例)  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  如何彻底删除建站之星生成的Banner?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Python文本处理实践_日志清洗解析【指导】  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  如何在IIS中配置站点IP、端口及主机头?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  Laravel distinct去重查询_Laravel Eloquent去重方法  如何在IIS中新建站点并解决端口绑定冲突?  三星网站视频制作教程下载,三星w23网页如何全屏?  如何在香港服务器上快速搭建免备案网站?  网易LOFTER官网链接 老福特网页版登录地址  简历在线制作网站免费版,如何创建个人简历?  如何在阿里云ECS服务器部署织梦CMS网站?  Angular 表单中正确绑定输入值以确保提交与验证正常工作  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  Laravel如何创建自定义中间件?(Middleware代码示例)  北京网站制作公司哪家好一点,北京租房网站有哪些?  用yum安装MySQLdb模块的步骤方法