news 2026/5/4 4:11:49

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/1 5:59:29

嵌入式安全通信实战:mbedtls TLS客户端开发与性能优化指南

嵌入式安全通信实战:mbedtls TLS客户端开发与性能优化指南 【免费下载链接】mbedtls An open source, portable, easy to use, readable and flexible TLS library, and reference implementation of the PSA Cryptography API. Releases are on a varying cadence,…

作者头像 李华
网站建设 2026/4/30 19:33:49

Clarity AI图像增强器:免费终极图像清晰化解决方案

Clarity AI图像增强器:免费终极图像清晰化解决方案 【免费下载链接】clarity-upscaler 项目地址: https://gitcode.com/GitHub_Trending/cl/clarity-upscaler 还在为模糊照片发愁吗?🤔 想让那些珍贵的老照片重获新生吗?今…

作者头像 李华
网站建设 2026/5/1 5:56:54

B站缓存视频合并工具:3步搞定离线观看的终极解决方案

B站缓存视频合并工具:3步搞定离线观看的终极解决方案 【免费下载链接】BilibiliCacheVideoMerge 项目地址: https://gitcode.com/gh_mirrors/bi/BilibiliCacheVideoMerge 还在为B站缓存视频的碎片化问题烦恼吗?BilibiliCacheVideoMerge 是一款专…

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

如何快速掌握PlugY:暗黑2单机玩家必学的8个超实用技巧

如何快速掌握PlugY:暗黑2单机玩家必学的8个超实用技巧 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 还在为暗黑破坏神2单机模式的各种限制而烦恼吗&…

作者头像 李华
网站建设 2026/5/1 7:23:45

免费解锁QQ音乐:qmcdump终极使用指南,3步完成格式转换

免费解锁QQ音乐:qmcdump终极使用指南,3步完成格式转换 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump…

作者头像 李华
网站建设 2026/5/1 10:03:41

Python+django的学生选课推荐互动社交系统(好友,关注,课程评价)

目录系统概述核心功能模块技术实现应用价值开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统概述 该系统基于PythonDjango框架开发,旨在为学生提供智能选课推荐、社交互动及课…

作者头像 李华