当前位置: 首页 > 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注解来指定顺序。


http://www.mrgr.cn/news/12964.html

相关文章:

  • 黑神话悟空无法登录服务器怎么办
  • 数据库系统 第28节 数据库迁移 案例分析
  • iOS 苹果健康-睡眠
  • 3D工艺大师:精准助力医疗设备远程维修
  • Redis key的过期时间和永久有效
  • 2024华为性格测试机考真题丨不会有人OD机试满分结果挂在性格测试上了吧?
  • golang RSA 解密前端jsencrypt发送的数据时异常 crypto/rsa: decryption error 解决方法
  • Linux的log日志排查
  • 【2025校招】4399 NLP算法工程师笔试题
  • ProxySQL 读写分离配置
  • 搭建自己的GPT
  • 【java17】java17新特性之日期周期格式化
  • 【Rust光年纪】深度探索:Rust语言中的文本分析与自然语言处理库综述
  • Leetcode面试经典150题-13.罗马数字转整数
  • 高级调度1
  • CDGA|如何有效管理和利用数据成为了企业面临的一大挑战
  • 两点问题 模型
  • evalscope评测LLM
  • Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
  • leetcode 3146 两个字符串的排列差