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

Spring Boot使用拦截器(Interceptor)

文章目录

  • 定义拦截器
  • 注册拦截器
  • 注意事项


  在Spring Boot中,拦截器(Interceptor)是另一种用于在请求被处理之前和之后执行代码的机制。与Servlet Filter相比,拦截器是Spring MVC框架的一部分,它提供了更细粒度的控制,特别是针对Spring MVC的Controller层。拦截器可以访问Spring的依赖注入(DI)功能,因此可以轻松地与Spring管理的bean进行交互。

定义拦截器

  要定义一个拦截器,你需要实现HandlerInterceptor接口,该接口包含三个方法:preHandle、postHandle和afterCompletion。

preHandle:在Controller方法调用之前执行。如果返回false,则中断请求处理,不会继续调用后续的拦截器和Controller方法。
postHandle:在Controller方法调用之后,但在视图渲染之前执行(如果请求处理的结果是视图的话)。
afterCompletion:在整个请求处理完成之后执行,包括视图渲染和所有过滤器之后。主要用于资源清理工作。

注册拦截器

  要注册拦截器,你需要实现WebMvcConfigurer接口(或继承WebMvcConfigurerAdapter类,但在Spring 5.0及更高版本中,WebMvcConfigurerAdapter已被标记为过时),并重写addInterceptors方法。

以下是一个简单的拦截器定义和注册的示例:

import org.springframework.stereotype.Component;  
import org.springframework.web.servlet.HandlerInterceptor;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  @Component  
public class MyInterceptor implements HandlerInterceptor {  @Override  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  // 在Controller方法调用之前执行  // 可以进行权限检查、日志记录等  System.out.println("Before processing request");  return true; // 继续执行后续的拦截器和Controller方法  }  @Override  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {  // 在Controller方法调用之后,视图渲染之前执行  // 可以修改ModelAndView  System.out.println("After processing request but before view rendering");  }  @Override  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {  // 在整个请求处理完成之后执行  // 可以进行资源清理工作  System.out.println("After completion of request processing");  }  
}  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.context.annotation.Configuration;  
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;  
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;  @Configuration  
public class WebConfig implements WebMvcConfigurer {  @Autowired  private MyInterceptor myInterceptor;  @Override  public void addInterceptors(InterceptorRegistry registry) {  registry.addInterceptor(myInterceptor)  .addPathPatterns("/api/**") // 指定拦截的路径模式  .excludePathPatterns("/api/public/**"); // 排除不需要拦截的路径模式  }  
}

注意事项

  拦截器可以访问Spring的依赖注入功能,因此可以轻松地与Spring管理的bean进行交互。
  拦截器只适用于Spring MVC的Controller层,不适用于非Spring MVC的请求处理。
你可以通过addPathPatterns和excludePathPatterns方法来指定哪些路径应该被拦截或排除。
  拦截器的执行顺序可以通过在InterceptorRegistry中添加拦截器时的顺序来控制。如果需要更细粒度的控制,可以考虑实现Ordered接口或使用@Order注解来指定顺序。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • mysql中group by语句使用
  • 结果一。6.will,begoingto,betodo,beabouttodo结构的区别
  • 在CentOS 7上安装MongoDB的方法
  • ROS imu传感器节点
  • 书生大模型实战营-进阶关卡-6-MindSearch 快速部署
  • 力扣8.27
  • 阿里云对象存储服务(Aliyun OSS):企业级云存储解决方案
  • Spring Boot 集成 JdbcTemplate(盘它!)
  • 敏捷架构开发方法和实践:迎接数字化时代的挑战
  • 东芝玉兔2.0明日震撼开售,洗衣机界的全新革命
  • 本地化云桌面系统环境VMware horizon搭建
  • Golang反射:运行时类型检查与操作
  • 虚幻5|制作玩家血量,体力(还未编辑,只用于引用)
  • Ubuntu 24.04 安装 intel 编译器
  • Android --- transaction.commitAllowingStateLoss();和transcation.commit 有什么区别
  • CentOS6 编译安装 redis-3.2.3
  • JavaScript DOM 10 - 滚动
  • JavaScript设计模式与开发实践系列之策略模式
  • Java程序员幽默爆笑锦集
  • jquery cookie
  • markdown编辑器简评
  • mongodb--安装和初步使用教程
  • Next.js之基础概念(二)
  • nginx 负载服务器优化
  • QQ浏览器x5内核的兼容性问题
  • text-decoration与color属性
  • Twitter赢在开放,三年创造奇迹
  • WinRAR存在严重的安全漏洞影响5亿用户
  • zookeeper系列(七)实战分布式命名服务
  • 服务器之间,相同帐号,实现免密钥登录
  • 给新手的新浪微博 SDK 集成教程【一】
  • 简单基于spring的redis配置(单机和集群模式)
  • 坑!为什么View.startAnimation不起作用?
  • 三分钟教你同步 Visual Studio Code 设置
  • 使用docker-compose进行多节点部署
  • 微服务框架lagom
  • 运行时添加log4j2的appender
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • #if和#ifdef区别
  • #前后端分离# 头条发布系统
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (1)常见O(n^2)排序算法解析
  • (2)(2.10) LTM telemetry
  • (C++20) consteval立即函数
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十六)一篇文章学会Java的常用API
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (学习日记)2024.01.19
  • (转)c++ std::pair 与 std::make
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)我也是一只IT小小鸟
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu