当前位置: 首页 > news >正文

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.jsqmd.com/news/266770/

相关文章:

  • 2026年知名的生态防草布厂家哪家便宜?性价比推荐 - 品牌宣传支持者
  • XUnity.AutoTranslator 完整使用教程:Unity游戏自动翻译插件终极指南
  • 油痘肌指南:洗面奶祛痘控油哪个牌子好,从成分到效果全解析 - 资讯焦点
  • 魔兽争霸III性能优化工具:5大核心功能彻底解决游戏卡顿问题
  • Mi 动漫 / 美食菜谱 / 去水印大师:精准踩中需求的实用工具
  • 思源宋体CN终极使用宝典:7种字重完全免费商用指南
  • 2026年专业GEO服务商深度测评:技术实力与效果转化双维解析 - 十大品牌推荐
  • 2026年geo公司推荐:基于工业与专业服务场景深度评测,解决获客与信任痛点并附排名 - 十大品牌推荐
  • 2026家具定制厂家权威推荐榜单:兔宝宝家具定制/全屋定制橱柜/全屋家具定制/全屋家居定制/全屋定制衣柜源头厂家精选。
  • 评价高的灯杆焊接合缝公司哪家强?2026年TOP3对比 - 品牌宣传支持者
  • 全网最全8个AI论文网站,专科生搞定毕业论文+格式规范!
  • 完整教程:Blender 云渲染平台实测对比:iRender、GarageFarm、渲染101 哪家更适合动画云渲染?
  • 有什么护肤品比较好用?从功效护肤逻辑看2026好用护肤品牌榜单 - 资讯焦点
  • 2026年热门的进口报关报检代办机构怎么联系? - 品牌宣传支持者
  • 2026年,高校“安家费”正退出历史舞台!
  • 2026摇床淘金设备厂家权威推荐榜单:旱地干选淘金设备/选金设备/溜槽淘金设备/岩金淘金设备/混汞淘金设备源头厂家精选。
  • nginx Ingress 限流Lua脚本
  • 窗帘裁剪机|卷边机有实力的源头厂家哪家强?浙江屹杰科技窗帘设备凭实力领跑 - 资讯焦点
  • 如何快速搭建一套物联网平台
  • VirtualLab Fusion应用:衍射光束扩散器产生LightTrans标识的设计与分析
  • 2026年中国GEO优化服务商格局新观察:头部企业梳理与选择推荐 - 十大品牌推荐
  • IDEA 2025.3.1.1 紧急发布,修复重大 BUG!!
  • 2026年评价高的瓦楞板公司推荐:塑料中空板、pp中空板、万通板、中空板周转箱、瓦楞板、防静电中空板、中空板选择指南 - 优质品牌商家
  • 上海单身交友服务哪家性价比高,绿洲婚介所排第几? - 工业品牌热点
  • 联想电脑使用F键
  • 2026年知名的制砂生产线工厂如何选?深度解析 - 品牌宣传支持者
  • 读人本智能产品设计6原则06互动(上)
  • ITK-SNAP 3D展示不显示十字线
  • Windows10右下角时间显示毫秒【任务栏显示毫秒】
  • 2026年比较好的预制钢结构设计公司哪家好?专业推荐 - 品牌宣传支持者