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

SpringBoot工程使用拦截器详解

在Spring Boot工程中,拦截器(Interceptor)是一种强大的工具,用于在请求处理的前后执行特定的逻辑。拦截器可以对请求进行预处理和后处理,例如身份验证、日志记录、性能监控等。

拦截器实现
  1. 实现HandlerInterceptor接口:自定义拦截器需要实现org.springframework.web.servlet.HandlerInterceptor接口,该接口包含三个方法:

    • preHandle:在请求处理之前执行,返回true表示继续执行后续的处理流程,返回false则中断请求处理。
    • postHandle:在请求处理之后、视图渲染之前执行。
    • afterCompletion:在整个请求处理完成后执行,通常用于资源清理等操作。
  2. 注册拦截器:需要将自定义的拦截器注册到 Spring MVC 的拦截器链中。可以通过实现WebMvcConfigurer接口,并重写addInterceptors方法来完成注册。

代码示例
importorg.springframework.stereotype.Component;importorg.springframework.web.servlet.HandlerInterceptor;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;// 自定义拦截器@ComponentpublicclassCustomInterceptorimplementsHandlerInterceptor{@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{System.out.println("请求处理前执行,URL: "+request.getRequestURI());// 可以在此进行身份验证等操作returntrue;}@OverridepublicvoidpostHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,org.springframework.web.servlet.ModelAndViewmodelAndView)throwsException{System.out.println("请求处理后、视图渲染前执行");}@OverridepublicvoidafterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex)throwsException{System.out.println("整个请求处理完成后执行");}}importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.InterceptorRegistry;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;// 配置拦截器@ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{privatefinalCustomInterceptorcustomInterceptor;publicWebConfig(CustomInterceptorcustomInterceptor){this.customInterceptor=customInterceptor;}@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(customInterceptor).addPathPatterns("/**")// 拦截所有请求.excludePathPatterns("/public/**");// 排除某些请求}}
身份验证的实现

在电商系统中,很多业务操作需要用户进行身份验证,例如查看订单、下单等。可以使用拦截器在请求处理前检查用户的登录状态,如果用户未登录,则重定向到登录页面。

代码示例
importorg.springframework.stereotype.Component;importorg.springframework.web.servlet.HandlerInterceptor;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;// 身份验证拦截器@ComponentpublicclassAuthenticationInterceptorimplementsHandlerInterceptor{@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{HttpSessionsession=request.getSession();Objectuser=session.getAttribute("user");if(user==null){// 用户未登录,重定向到登录页面response.sendRedirect("/login");returnfalse;}returntrue;}}importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.InterceptorRegistry;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;// 配置身份验证拦截器@ConfigurationpublicclassAuthWebConfigimplementsWebMvcConfigurer{privatefinalAuthenticationInterceptorauthenticationInterceptor;publicAuthWebConfig(AuthenticationInterceptorauthenticationInterceptor){this.authenticationInterceptor=authenticationInterceptor;}@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(authenticationInterceptor).addPathPatterns("/orders/**","/checkout/**");// 拦截订单和结算相关的请求}}
日志记录

在电商系统中,记录用户的请求日志有助于后续的问题排查和数据分析。可以使用拦截器在请求处理前后记录相关信息,例如请求的 URL、请求参数、处理时间等。

代码示例
importorg.springframework.stereotype.Component;importorg.springframework.web.servlet.HandlerInterceptor;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.util.Enumeration;// 日志记录拦截器@ComponentpublicclassLoggingInterceptorimplementsHandlerInterceptor{@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{StringBuilderrequestParams=newStringBuilder();Enumeration<String>paramNames=request.getParameterNames();while(paramNames.hasMoreElements()){StringparamName=paramNames.nextElement();StringparamValue=request.getParameter(paramName);requestParams.append(paramName).append("=").append(paramValue).append("&");}if(requestParams.length()>0){requestParams.deleteCharAt(requestParams.length()-1);}System.out.println("请求 URL: "+request.getRequestURI()+", 请求参数: "+requestParams.toString());returntrue;}@OverridepublicvoidafterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex)throwsException{System.out.println("请求处理完成,状态码: "+response.getStatus());}}importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.InterceptorRegistry;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;// 配置日志记录拦截器@ConfigurationpublicclassLoggingWebConfigimplementsWebMvcConfigurer{privatefinalLoggingInterceptorloggingInterceptor;publicLoggingWebConfig(LoggingInterceptorloggingInterceptor){this.loggingInterceptor=loggingInterceptor;}@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(loggingInterceptor).addPathPatterns("/**");// 拦截所有请求}}
http://www.jsqmd.com/news/1334764/

相关文章:

  • One Dark Pro终极指南:打造专业级VS Code编程环境的5个关键技巧
  • LGTV Companion:智能电视与PC联动终极解决方案,一键解决OLED显示器管理难题
  • Cortex-M3:为什么需要区分“加载地址”和“执行地址”?
  • 5个颠覆性功能:Blueman重新定义Linux蓝牙管理体验
  • Godot引擎径向菜单开发指南:模块化设计与数据驱动实现
  • 3小时从零到一:raylib游戏开发终极指南
  • 福州自卑心理咨询哪家好:【安肯心理】坦然正视不足 - 17328623207
  • 如何用Python计算余弦相似性
  • 2026年衡水强泽非标耐磨尼龙轮挑选攻略及行业优质企业盘点 - 小范同学a
  • 福州自卑心理咨询哪家好:【安肯心理】帮扶循序渐进 - 17328623207
  • 3分钟精通FSearch:Linux文件搜索效率的革命性解决方案
  • 合肥新娘租婚纱避坑:套餐里的“免费伴娘服”款式老旧又脏,升级要加多少钱提前问清楚 - 生活测评君
  • 一文读懂RuView架构:从WiFi信号到128维嵌入向量的技术路径
  • 【限时免费】 [今日热门] CLIP-ViT-B-16-laion2B-s34B-b88K
  • Path of Building PoE2:流放之路2最强角色构建工具终极指南
  • Talebook个人数字图书馆:3步搭建专属电子书管理平台
  • 2026酸枣糕开胃品牌**全景盘点:正规合规实力口碑榜详解,附行业避坑指南与优质服务商推荐 - U渠道
  • Resource Override:掌控网页资源的终极调试工具
  • 【YOLO26创新改进】AAAI 2025 | 损失函数涨点改进篇 | 使用SDLoss尺度动态损失函数,适合具有目标尺寸小、尺度变化明显、标签边界模糊和重合度误差不稳定特点的目标检测与实例分割任务
  • 如何快速使用Squirrel-RIFE:免费AI视频补帧完整教程
  • 2026年塑胶壳加工厂哪家好?深圳实力厂商给出选择标准参考 - 变量人生001
  • 终极PS4游戏修改指南:1490款游戏轻松作弊的GoldHEN金手指管理器
  • 福州室内装修设计公司推荐深度解析:行业专家视角 - 优企甄选
  • 微信机器人接口:深入浅出微信自动回复接口:从内存注入到状态机驱动实现
  • DingFlow终极指南:如何用React轻松构建企业级审批流程设计器
  • 终极指南:五步让旧款Mac重获新生,免费升级最新macOS系统
  • 2026年8月 广东冷库建造厂家推荐|资质齐全冷库工程公司汇总 - 互联网科技品牌测评
  • 人工智能训练工程师(工信部教考中心)报考条件、报名流程、费用 - 品牌品鉴馆
  • 2026酸枣糕复购率品牌盘点:正规合规实力品牌选型指南,萍乡本地食品服务商合作避坑FAQ大全 - 行业观察网
  • OpenCore Legacy Patcher终极指南:如何让旧Mac焕发新生,体验最新macOS系统