news 2026/5/6 16:52:13

SpringBoot 拦截器-监听器实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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容器;
  • 支持同时注册多个监听器,按需执行。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 17:58:01

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

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

作者头像 李华
网站建设 2026/5/4 5:11:39

网易云音乐无损下载完整指南:快速构建个人高品质音乐库

网易云音乐无损下载完整指南:快速构建个人高品质音乐库 【免费下载链接】NeteaseCloudMusicFlac 根据网易云音乐的歌单, 下载flac无损音乐到本地.。 项目地址: https://gitcode.com/gh_mirrors/nete/NeteaseCloudMusicFlac 想要将网易云音乐中的心爱歌单以无…

作者头像 李华
网站建设 2026/4/30 8:11:15

终极解密:5分钟掌握RPCS3汉化补丁,让PS3游戏说中文

终极解密:5分钟掌握RPCS3汉化补丁,让PS3游戏说中文 【免费下载链接】rpcs3 PS3 emulator/debugger 项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3 还在为看不懂日文或英文的PS3游戏而烦恼吗?RPCS3模拟器的汉化补丁功能让你…

作者头像 李华
网站建设 2026/4/30 6:35:53

Bloxstrap完全指南:5个技巧提升Roblox游戏体验

Bloxstrap完全指南:5个技巧提升Roblox游戏体验 【免费下载链接】bloxstrap An open-source, feature-packed alternative bootstrapper for Roblox. 项目地址: https://gitcode.com/GitHub_Trending/bl/bloxstrap Bloxstrap是一款功能强大的开源Roblox启动器…

作者头像 李华
网站建设 2026/5/2 20:07:36

如何快速掌握魔兽世界API工具:从零开始的完整实战教程

如何快速掌握魔兽世界API工具:从零开始的完整实战教程 【免费下载链接】wow_api Documents of wow API -- 魔兽世界API资料以及宏工具 项目地址: https://gitcode.com/gh_mirrors/wo/wow_api 还在为魔兽世界复杂的技能组合而烦恼吗?想要一键释放多…

作者头像 李华
网站建设 2026/5/1 6:19:05

3D模型格式转换技术深度解析:从问题诊断到性能优化

3D模型格式转换技术深度解析:从问题诊断到性能优化 【免费下载链接】awesome-blender 🪐 A curated list of awesome Blender addons, tools, tutorials; and 3D resources for everyone. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-b…

作者头像 李华