Skip to Content

功能

  • 在请求处理过程的不同阶段进行拦截和处理

使用

  1. 创建拦截器:实现 HandlerInterceptor 接口,需要重写三个方法
    • preHandle:在请求处理之前执行,返回 true 表示继续处理,false 表示请求被拦截
      • preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    • postHandle:在请求处理之后,视图渲染之前执行
      • postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
    • afterCompletion:在请求处理完成之后执行,用于资源清理等操作
      • afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
@Component public class MyInterceptor implements HandlerInterceptor { // 请求处理前 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle: Request is being processed"); // 返回 true 表示继续请求处理,返回 false 表示拦截请求 return true; } // 请求处理后,视图渲染前 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle: Request processed"); } // 请求完成后,响应返回前 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion: Request completed"); } }
  1. 注册拦截器:实现 WebMvcConfigurer 接口并重写 addInterceptors 方法来注册拦截器
@Configuration public class WebConfig implements WebMvcConfigurer { @Autowired private final MyInterceptor myInterceptor; // 上面创建的拦截器实例 @Override public void addInterceptors(InterceptorRegistry registry) { // 注册拦截器并指定拦截的路径 registry.addInterceptor(myInterceptor) .addPathPatterns("/api/**") // 拦截路径 .excludePathPatterns("/api/login", "/api/register"); // 排除路径 } }

拦截器和过滤器区别

特性拦截器过滤器
所属框架Spring MVCServlet
作用范围仅在 Spring MVC 请求处理流程中起作用在所有的 HTTP 请求中起作用
功能控制器的请求处理、视图渲染等流程控制请求和响应的通用预处理和后处理
配置方式通过 WebMvcConfigurer 配置通过 FilterRegistrationBean 配置
可以访问的对象Handler(控制器方法)、ModelAndViewHttpServletRequestHttpServletResponse只能访问 HttpServletRequestHttpServletResponse
典型用途权限验证、日志记录、请求处理流程控制等日志记录、性能监控、跨域处理、安全检查等
执行顺序拦截器是在 Spring MVC 控制器方法执行前和执行后进行处理,拦截器链顺序按照配置顺序执行过滤器链中的过滤器按注册顺序执行,并且在 Servlet 或 JSP 调用前执行
Last updated on