Spring Boot 中的拦截器 (HandlerInterceptor) 使用方案

Spring Boot 中的 拦截器 (HandlerInterceptor) 使用方案

引言

在 Spring Boot 中,HandlerInterceptor 是一个强大的工具,可以帮助我们在请求处理的生命周期中插入自定义逻辑。它允许我们在请求被处理之前和之后执行一些操作,例如请求验证、日志记录和性能监控等。本文将介绍 HandlerInterceptor 的基本用法及其实现方式。

什么是 HandlerInterceptor?

HandlerInterceptor 是 Spring MVC 提供的一个接口,用于在控制器处理请求之前和之后执行操作。它类似于过滤器,但更灵活且可以访问 Spring MVC 的特定功能。HandlerInterceptor 提供了三个主要的方法:

  • preHandle: 在请求到达控制器之前调用。
  • postHandle: 在控制器处理请求之后、视图渲染之前调用。
  • afterCompletion: 在请求处理完成后调用。

实现 HandlerInterceptor

1. 创建拦截器类

创建一个实现 HandlerInterceptor 接口的拦截器类。以下是实现拦截器类示例代码:

java 复制代码
public class CustomInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
        Object handler) throws Exception {
        System.out.println("CustomInterceptor PreHandle");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {
        System.out.println("CustomInterceptor PostHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
        Object handler, Exception ex) throws Exception {
        System.out.println("CustomInterceptor AfterCompletion");

    }
}

2. 注册拦截器

创建完拦截器之后,需要将其注册到 Spring 的上下文中。可以通过实现 WebMvcConfigurer 接口来注册拦截器。以下是注册拦截器的示例代码:

java 复制代码
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new CustomInterceptor())
            .addPathPatterns("/**") // 指定拦截的路径
            .excludePathPatterns("/exclude"); // 排除不拦截的路径
    }
}

注意事项

  • 请求路径 : 使用 addPathPatterns 方法可以指定哪些请求路径需要被拦截,而 excludePathPatterns 则可以用来排除特定的请求。
  • 异常处理 : 在 afterCompletion 方法中可以处理请求期间发生的异常。

结论

HandlerInterceptor 是 Spring Boot 中强大的请求处理工具,能够帮助我们在请求生命周期的不同阶段插入自定义逻辑。通过实现 HandlerInterceptor 接口和配置 WebMvcConfigurer,我们可以轻松实现请求的日志记录、性能监控等功能。灵活运用 HandlerInterceptor,可以使我们的应用程序更加健壮和易于维护。

相关推荐
·云扬·6 分钟前
【Java源码阅读系列37】深度解读Java BufferedReader 源码
java·开发语言
martinzh1 小时前
Spring AI 项目介绍
后端
Bug退退退1231 小时前
RabbitMQ 高级特性之重试机制
java·分布式·spring·rabbitmq
小皮侠1 小时前
nginx的使用
java·运维·服务器·前端·git·nginx·github
前端付豪1 小时前
20、用 Python + API 打造终端天气预报工具(支持城市查询、天气图标、美化输出🧊
后端·python
爱学习的小学渣1 小时前
关系型数据库
后端
武子康1 小时前
大数据-33 HBase 整体架构 HMaster HRegion
大数据·后端·hbase
前端付豪1 小时前
19、用 Python + OpenAI 构建一个命令行 AI 问答助手
后端·python
凌览1 小时前
斩获 27k Star,一款开源的网站统计工具
前端·javascript·后端
Zz_waiting.1 小时前
Javaweb - 10.4 ServletConfig 和 ServletContext
java·开发语言·前端·servlet·servletconfig·servletcontext·域对象