返回

Spring MVC 拦截器:详尽指南

前端

概述

Spring MVC 拦截器是一个强大的工具,用于对处理器进行预处理和后处理,并在请求和响应的生命周期中提供控制。通过自定义拦截器,可以实现各种功能,例如安全检查、日志记录、性能监控和请求/响应修改。

自定义拦截器

要创建自定义拦截器,需要实现 HandlerInterceptor 接口并重写所需的方法。最常用的方法有:

  • preHandle():在处理器方法执行之前调用,用于执行预处理逻辑。如果返回 true,则继续执行处理器;否则,中断请求。
  • postHandle():在处理器方法执行之后调用,用于执行后处理逻辑。此时,视图已渲染,但响应尚未提交。
  • afterCompletion():在请求完成(无论成功还是失败)后调用,用于执行清理或日志记录等操作。

目录结构

为了更好地组织代码,建议采用以下目录结构:

src/main/java
  |-- com.example.demo
    |-- controllers
    |-- interceptors
    |-- service

将自定义拦截器放在 interceptors 包中。

示例拦截器

创建一个名为 MyInterceptor1 的自定义拦截器:

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor1 implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在请求处理之前执行预处理逻辑
        // 例如:安全检查、日志记录
        System.out.println("MyInterceptor1 preHandle...");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 在请求处理之后执行后处理逻辑
        // 例如:视图渲染、性能监控
        System.out.println("MyInterceptor1 postHandle...");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 在请求完成后执行清理或日志记录
        System.out.println("MyInterceptor1 afterCompletion...");
    }
}

注册拦截器

springmvc.xml 配置文件中注册自定义拦截器:

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <bean class="com.example.demo.interceptors.MyInterceptor1" />
    </mvc:interceptor>
</mvc:interceptors>

这将拦截所有请求。可以使用 path 属性指定要拦截的特定请求模式。

SEO 优化