如何在 Spring Boot 中实现 HandlerInterceptor 配置

在 Spring Boot 中,HandlerInterceptor 用于在请求到达控制器之前以及响应返回之前进行处理。这样可以为你的应用程序添加一些通用功能,比如认证、日志记录、性能监测等。接下来,我将详细介绍如何配置 HandlerInterceptor。

实现流程

我们一起来看一下实现 HandlerInterceptor 的步骤:

步骤 描述 代码示例
1 创建一个 Interceptor 类 MyInterceptor
2 注册 Interceptor 容器注入 WebMvcConfigurer
3 编写需要拦截的方法 preHandle, postHandle, afterCompletion

步骤详解

步骤 1:创建一个 Interceptor 类

首先,我们需要创建一个继承自 HandlerInterceptor 的类。在这个类中,我们可以重写 preHandlepostHandleafterCompletion 方法。

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 {
        // 处理请求前的逻辑
        System.out.println("Request URI: " + request.getRequestURI());
        return true; // 返回true继续处理请求,返回false则终止请求
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 处理请求后的逻辑
        System.out.println("Request processed");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 请求完成后的逻辑
        System.out.println("Request completed");
    }
}

注释

  • preHandle 方法: 请求到达控制器之前进行处理。如果返回 false,则请求会被终止。
  • postHandle 方法: 请求处理完成后,但在渲染视图之前调用,可以用来处理一些数据。
  • afterCompletion 方法: 执行完请求之后,清理资源等操作。

步骤 2:注册 Interceptor

接着,我们需要将刚刚创建的 MyInterceptor 类注册到 Spring Boot 的上下文中。我们可以通过实现 WebMvcConfigurer 接口来完成这一任务。

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) {
        // 注册自定义的Interceptor
        registry.addInterceptor(myInterceptor)
                .addPathPatterns("/**"); // 拦截所有请求
    }
}

注释

  • addInterceptors 方法: 在这个方法中,我们添加自定义的拦截器并指定其拦截的路径模式。
  • addPathPatterns("/**"): 该配置表示拦截所有请求,您可以根据需要限制特定路径。

步骤 3:编写需要拦截的方法

在前面的步骤中,我们已经实现了需要执行的逻辑。以下是添加日志拦截功能的图示,帮助更直观了解请求的处理流程。

pie
    title HandlerInterceptor 执行过程
    "Request Pre-Handle": 30
    "Request Handle": 40
    "Request Post-Handle": 20
    "Request After Completion": 10

结尾

至此,我们已经在 Spring Boot 中成功实现了 HandlerInterceptor 的配置。通过以上的步骤,我们创建了一个拦截器并注册了它,以便在请求处理流程中进行特定操作。

这类模式在处理日志、权限验证、请求计数等场景时非常有用,可以提高代码的可复用性和维护性。

希望你通过这篇文章掌握了如何在 Spring Boot 中使用 HandlerInterceptor 的基础知识。你可以根据实际需求,进一步扩展和改进拦截器的逻辑!如果还有其他疑问,欢迎继续讨论。