2026/5/20 23:32:18
网站建设
项目流程
摄影师个人网站怎么做,乐居房产官方网站,网站建设哪家好 需要多少钱,企业实缴公示在什么网站做文章目录SpringBoot4.0 拦截器-监听器实战**拦截器的概念和作用**拦截器实战监听器概念和作用**监听器实战SpringBoot4.0 拦截器-监听器实战
拦截器的概念和作用
核心概念说明
拦截器#xff08;Interceptor#xff09;是Spring MVC框架中的重要组件#xff1b;用于在请求…文章目录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 → 响应拦截器实战创建拦截器步骤实现HandlerInterceptor接口重写三个核心方法配置拦截器注册登录验证拦截器ComponentSlf4jpublicclassLoginInterceptorimplementsHandlerInterceptor{OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{log.info( 进入拦截器 );log.info(请求URL: request.getRequestURI());log.info(请求方法: request.getMethod());// 登录验证逻辑HttpSessionsessionrequest.getSession();Objectusersession.getAttribute(user);if(usernull){// 未登录返回错误信息response.setContentType(application/json;charsetutf-8);PrintWriterwriterresponse.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.60608:00 INFO 21940 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet dispatcherServlet 2026-01-18T21:25:46.60608:00 INFO 21940 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet dispatcherServlet 2026-01-18T21:25:46.60608:00 INFO 21940 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 0 ms 2026-01-18T21:25:46.61608:00 INFO 21940 --- [nio-8080-exec-1] c.g.interceptor.LoginInterceptor : 进入拦截器 2026-01-18T21:25:46.61608:00 INFO 21940 --- [nio-8080-exec-1] c.g.interceptor.LoginInterceptor : 请求URL: /user/info 2026-01-18T21:25:46.61608:00 INFO 21940 --- [nio-8080-exec-1] c.g.interceptor.LoginInterceptor : 请求方法: GET 2026-01-18T21:25:53.58408:00 INFO 21940 --- [nio-8080-exec-3] c.g.interceptor.LoginInterceptor : 进入拦截器 2026-01-18T21:25:53.58408:00 INFO 21940 --- [nio-8080-exec-3] c.g.interceptor.LoginInterceptor : 请求URL: /user/info 2026-01-18T21:25:53.58408:00 INFO 21940 --- [nio-8080-exec-3] c.g.interceptor.LoginInterceptor : 请求方法: GET 2026-01-18T21:25:53.58608:00 INFO 21940 --- [nio-8080-exec-3] c.g.interceptor.LoginInterceptor : 控制器执行完成 2026-01-18T21:25:53.58608: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{privatestaticfinalLoggerloggerLoggerFactory.getLogger(SessionListener.class);privatestaticfinalAtomicIntegeronlineUserCountnewAtomicInteger(0);/** * Session创建时调用 */OverridepublicvoidsessionCreated(HttpSessionEventse){intcountonlineUserCount.incrementAndGet();logger.info(新用户登录当前在线用户数: {},count);// 设置Session超时时间30分钟se.getSession().setMaxInactiveInterval(30*60);}/** * Session销毁时调用 */OverridepublicvoidsessionDestroyed(HttpSessionEventse){intcountonlineUserCount.decrementAndGet();logger.info(用户退出当前在线用户数: {},count);}/** * 获取当前在线用户数 */publicstaticintgetOnlineUserCount(){returnonlineUserCount.get();}}GetMapping(/hello)publicStringhello(HttpSessionsession){return在线人数SessionListener.getOnlineUserCount();}自动注册说明SpringBoot4.0自动扫描Component注解的监听器无需额外配置自动注册到Servlet容器支持同时注册多个监听器按需执行。