SpringBoot 拦截器-监听器实战

文章目录

  • SpringBoot4.0 拦截器-监听器实战
    • **拦截器的概念和作用**
    • 拦截器实战
    • 监听器概念和作用**
    • 监听器实战

SpringBoot4.0 拦截器-监听器实战

拦截器的概念和作用

核心概念说明

  • 拦截器(Interceptor)是Spring MVC框架中的重要组件;
  • 用于在请求处理的前后添加预处理和后处理逻辑;
  • 类似于Servlet中的Filter,但功能更强大,可以获取Spring容器中的Bean。

拦截器与过滤器对比

特性拦截器(Interceptor)过滤器(Filter)
依赖框架Spring MVCServlet规范
作用范围控制器方法级别请求级别
获取Bean可以获取Spring Bean不能直接获取
执行时机控制器方法执行前后请求进入Servlet前后
配置方式实现HandlerInterceptorweb.xml或@WebFilter

拦截器的执行流程:

请求 → 过滤器 → 拦截器preHandle → 控制器 → 拦截器postHandle → 视图渲染 → 拦截器afterCompletion → 响应

拦截器实战

创建拦截器步骤

  1. 实现HandlerInterceptor接口
  2. 重写三个核心方法
  3. 配置拦截器注册

登录验证拦截器

@Component@Slf4jpublicclassLoginInterceptorimplementsHandlerInterceptor{@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{log.info("=== 进入拦截器 ===");log.info("请求URL: "+request.getRequestURI());log.info("请求方法: "+request.getMethod());// 登录验证逻辑HttpSessionsession=request.getSession();Objectuser=session.getAttribute("user");if(user==null){// 未登录,返回错误信息response.setContentType("application/json;charset=utf-8");PrintWriterwriter=response.getWriter();writer.write("{\"code\": 401, \"message\": \"请先登录\"}");writer.flush();returnfalse;// 中断请求}returntrue;// 继续执行}@OverridepublicvoidpostHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,@NullableModelAndViewmodelAndView)throwsException{log.info("=== 控制器执行完成 ===");}@OverridepublicvoidafterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,@NullableExceptionex)throwsException{log.info("=== 请求处理完成 ===");if(ex!=null){log.info("异常信息: "+ex.getMessage());}}}

配置拦截器注册

@ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{@AutowiredprivateLoginInterceptorloginInterceptor;@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(loginInterceptor).addPathPatterns("/**")// 拦截所有路径.excludePathPatterns(// 排除路径"/user/login","/user/register","/css/**","/js/**","/images/**");}}

测试结果

2026-01-18T21:25:46.606+08:00 INFO 21940 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2026-01-18T21:25:46.606+08:00 INFO 21940 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2026-01-18T21:25:46.606+08:00 INFO 21940 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms 2026-01-18T21:25:46.616+08:00 INFO 21940 --- [nio-8080-exec-1] c.g.interceptor.LoginInterceptor : === 进入拦截器 === 2026-01-18T21:25:46.616+08:00 INFO 21940 --- [nio-8080-exec-1] c.g.interceptor.LoginInterceptor : 请求URL: /user/info 2026-01-18T21:25:46.616+08:00 INFO 21940 --- [nio-8080-exec-1] c.g.interceptor.LoginInterceptor : 请求方法: GET 2026-01-18T21:25:53.584+08:00 INFO 21940 --- [nio-8080-exec-3] c.g.interceptor.LoginInterceptor : === 进入拦截器 === 2026-01-18T21:25:53.584+08:00 INFO 21940 --- [nio-8080-exec-3] c.g.interceptor.LoginInterceptor : 请求URL: /user/info 2026-01-18T21:25:53.584+08:00 INFO 21940 --- [nio-8080-exec-3] c.g.interceptor.LoginInterceptor : 请求方法: GET 2026-01-18T21:25:53.586+08:00 INFO 21940 --- [nio-8080-exec-3] c.g.interceptor.LoginInterceptor : === 控制器执行完成 === 2026-01-18T21:25:53.586+08:00 INFO 21940 --- [nio-8080-exec-3] c.g.interceptor.LoginInterceptor : === 请求处理完成 ===

监听器概念和作用**

核心概念说明

  • 监听器(Listener)用于监听Web应用中的事件
  • 可以监听ServletContext、HttpSession、ServletRequest的生命周期事件
  • 在特定事件发生时执行相应的业务逻辑

监听器类型分类

监听器类型监听事件应用场景
ServletContextListener应用启动和关闭初始化资源、加载配置
ServletContextAttributeListener应用域属性变化监控配置变化
HttpSessionListenerSession创建和销毁在线用户统计
HttpSessionAttributeListenerSession属性变化用户状态跟踪
ServletRequestListener请求开始和结束请求统计、日志记录

监听器执行时机

应用启动 → Context初始化 → 监听器contextInitialized → 请求到达 → Session创建 → 监听器sessionCreated

监听器实战

@ComponentpublicclassSessionListenerimplementsHttpSessionListener{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(SessionListener.class);privatestaticfinalAtomicIntegeronlineUserCount=newAtomicInteger(0);/** * Session创建时调用 */@OverridepublicvoidsessionCreated(HttpSessionEventse){intcount=onlineUserCount.incrementAndGet();logger.info("新用户登录,当前在线用户数: {}",count);// 设置Session超时时间(30分钟)se.getSession().setMaxInactiveInterval(30*60);}/** * Session销毁时调用 */@OverridepublicvoidsessionDestroyed(HttpSessionEventse){intcount=onlineUserCount.decrementAndGet();logger.info("用户退出,当前在线用户数: {}",count);}/** * 获取当前在线用户数 */publicstaticintgetOnlineUserCount(){returnonlineUserCount.get();}}
@GetMapping("/hello")publicStringhello(HttpSessionsession){return"在线人数:"+SessionListener.getOnlineUserCount();}

自动注册说明

  • SpringBoot4.0自动扫描@Component注解的监听器;
  • 无需额外配置,自动注册到Servlet容器;
  • 支持同时注册多个监听器,按需执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1182307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年知名的生态防草布厂家哪家便宜?性价比推荐 - 品牌宣传支持者

在农业现代化进程中,生态防草布作为高效环保的农业辅助材料,其市场需求持续增长。本文基于产品性能、价格优势、产能规模及客户反馈等维度,对2026年国内生态防草布厂家进行客观评估。其中,玉田县兆隆科技有限公司凭…

XUnity.AutoTranslator 完整使用教程:Unity游戏自动翻译插件终极指南

XUnity.AutoTranslator 完整使用教程:Unity游戏自动翻译插件终极指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator 是一款革命性的Unity游戏自动翻译插件&#xff0c…

魔兽争霸III性能优化工具:5大核心功能彻底解决游戏卡顿问题

魔兽争霸III性能优化工具:5大核心功能彻底解决游戏卡顿问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸III》在现代化…

油痘肌指南:洗面奶祛痘控油哪个牌子好,从成分到效果全解析 - 资讯焦点

进入2026年,油痘肌的清洁逻辑已从“盲目去油”进化到“精准控油”阶段。对于油脂分泌旺盛且伴有炎症的用户,洗面奶不仅是带走污垢的工具,更是平衡皮肤微生态的第一道防线。在探究洗面奶祛痘控油哪个牌子好时,我们需…

思源宋体CN终极使用宝典:7种字重完全免费商用指南

思源宋体CN终极使用宝典:7种字重完全免费商用指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf Source Han Serif CN(思源宋体CN)是由Google与Ado…

2026年专业GEO服务商深度测评:技术实力与效果转化双维解析 - 十大品牌推荐

2026年数字营销已全面迈入全域智能运营新阶段,生成式引擎优化(GEO)作为企业获取高质量商业线索的核心支柱,其重要性日益凸显。本次测评聚焦市场主流服务商,围绕技术架构、算法效率、服务覆盖、实战成效及客户口碑…

2026年geo公司推荐:基于工业与专业服务场景深度评测,解决获客与信任痛点并附排名 - 十大品牌推荐

基于对生成式AI搜索生态的长期追踪、多家第三方技术评测报告及行业客户公开反馈数据,甄选出2026年值得企业重点关注的GEO优化服务商榜单,覆盖工业制造、专业服务、品牌营销等多种商业场景需求,逐一解答“哪家GEO公司…

Mi 动漫 / 美食菜谱 / 去水印大师:精准踩中需求的实用工具

翻应用商店总怕碰着 “花架子”,直到挖到这三款,试完直接清了半手机冗余软件。 mi 动漫是二次元的 “实时补给站”。界面按 “追番日历 / 题材” 分类,新更作品标着更新时间,连小众短篇都能挖到高清章节。无广弾窻,存…

全网最全8个AI论文网站,专科生搞定毕业论文+格式规范!

全网最全8个AI论文网站,专科生搞定毕业论文格式规范! AI 工具如何助力专科生高效完成毕业论文 在当前的学术环境中,越来越多的专科生开始借助 AI 工具来辅助自己的毕业论文写作。这些工具不仅能够帮助学生节省大量时间,还能有效降…

评价高的灯杆焊接合缝公司哪家强?2026年TOP3对比 - 品牌宣传支持者

在灯杆制造行业,焊接合缝工艺直接决定了产品的质量和使用寿命。经过对行业技术实力、设备先进性、客户口碑及售后服务等多维度评估,我们筛选出2026年灯杆焊接合缝领域最具竞争力的5家企业。其中,江苏特威机床制造有…

2026家具定制厂家权威推荐榜单:兔宝宝家具定制/全屋定制橱柜/全屋家具定制/全屋家居定制/全屋定制衣柜源头厂家精选。

当前,中国家具定制市场规模已突破4000亿元,并保持年均15% 以上的增长速度,展现出巨大的市场潜力与消费活力。随着消费者对个性化空间、环保健康与功能集成的需求日益提升,行业竞争已从单一产品制造,转向提供涵盖设…

完整教程:Blender 云渲染平台实测对比:iRender、GarageFarm、渲染101 哪家更适合动画云渲染?

完整教程:Blender 云渲染平台实测对比:iRender、GarageFarm、渲染101 哪家更适合动画云渲染?2026-01-19 09:23 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !imp…

有什么护肤品比较好用?从功效护肤逻辑看2026好用护肤品牌榜单 - 资讯焦点

一、当功效护肤成为主流,消费者到底在“选什么” 随着功效护肤逐步成为主流,消费者对护肤品的期待正在发生明显变化。人们不再只关注“有没有效果”,而是开始追问三个更底层的问题:功效是否清晰,是否真的在解决某…

2026年,高校“安家费”正退出历史舞台!

这是转发2025年的一篇文章,该文章发出来后,被大量在读博士吐槽制造焦虑,但小编常年做高校招聘资讯,在采集信息时,的确也有同样的感觉,就是自2025年起,突然间很多高校的招聘信息中,已…

2026年热门的进口报关报检代办机构怎么联系? - 品牌宣传支持者

在2026年选择进口报关报检代办机构时,企业应重点考察服务商的行业经验、口岸覆盖能力、团队专业度和客户服务响应速度。根据对华南、华东地区主要港口城市报关服务市场的调研,结合企业实际服务案例和客户反馈,我们筛…

2026摇床淘金设备厂家权威推荐榜单:旱地干选淘金设备/选金设备/溜槽淘金设备/岩金淘金设备/混汞淘金设备源头厂家精选。

在黄金开采与选矿领域,摇床设备作为重力分选的核心环节,其性能优劣直接决定了最终的精矿品位与金属回收率,对矿山经济效益有着决定性影响。当前,行业竞争已从单一设备制造,转向为不同规模、不同矿种(从大型岩金矿…

nginx Ingress 限流Lua脚本

可用于生产的版本配置已经添加好并且已经测试过功能。 针对客户端IP对单个域名的分钟级访问。 ingress-nginx cm配置文件 添加下面的配置,主要作用是把xforwardfor的客户端真实IP地址传给remote_address,脚本中的限频…

窗帘裁剪机|卷边机有实力的源头厂家哪家强?浙江屹杰科技窗帘设备凭实力领跑 - 资讯焦点

“让天下没有难做的窗帘工艺”,这一质朴而坚定的使命,贯穿了浙江屹杰科技有限公司的发展历程。在窗帘自动化设备赛道,这家集国家高新技术企业、全国优秀民营企业等诸多荣誉于一身的品牌,用十余年坚守诠释着“立足智…

如何快速搭建一套物联网平台

物联网平台 - Thinglinks-iot ## 🌟 项目简介 一个功能完备、高可扩展的物联网平台,提供完整的设备接入、管理和数据处理解决方案。支持多种网络协议,具备强大的消息解析和实时告警能力,帮助企业快速构建物联网应用。 该项目现已纳…

VirtualLab Fusion应用:衍射光束扩散器产生LightTrans标识的设计与分析

摘要衍射扩散器可以被设计来创建任何图案。在这里,我们展示了 VirtualLab Fusion的一些可能性,以设计、优化、建模和仿真这种衍射光学元件(DOE)并把公司的标志投射到一幢大楼上。有不同的方法来生成光的图案。利用相干激光和衍射扩…