0
点赞
收藏
分享

微信扫一扫

java HandlerInterceptor 顺序

理解 Java HandlerInterceptor 的顺序

在 Java Web 应用开发中,HandlerInterceptor 是 Spring 框架中的一个重要组件。它可以用于在请求到达 Controller 之前和响应返回客户端之前执行一些操作,比如权限检查、日志记录等。理解 HandlerInterceptor 的顺序执行对开发高效的 Web 应用至关重要。本文将帮助你理清 HandlerInterceptor 的执行流程,并通过例子教你如何实现它。

处理流程概述

下面是处理流程的简要概述,采用表格形式展示:

步骤 描述
1. 请求到达 客户端发起请求,请求会经过过滤器链
2. PreHandle preHandle() 方法执行,可以进行权限校验
3. 调用 Controller 如果 preHandle() 返回 true,调用相应的 Controller
4. PostHandle Controller 执行完毕后,执行 postHandle()
5. AfterCompletion 请求处理完毕,执行 afterCompletion()

每一步详细实现

接下来,我们将详细讨论每一步的具体代码和注释。

1. 创建 Interceptor

首先,我们需要创建一个自定义的 HandlerInterceptor 实现类:

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

public class MyInterceptor implements HandlerInterceptor {

    // PreHandle 方法,在请求到达 Controller 之前执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("PreHandle method is called - " + request.getRequestURI());
        // 返回 true 表示继续处理请求,返回 false 表示停止处理
        return true; 
    }

    // PostHandle 方法,在 Controller 执行完成后执行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, 
                            ModelAndView modelAndView) throws Exception {
        System.out.println("PostHandle method is called");
    }

    // AfterCompletion 方法,在请求完全处理后执行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, 
                                Exception ex) throws Exception {
        System.out.println("AfterCompletion method is called");
    }
}

注释:

  • preHandle(): 在请求到达 Controller 之前调用。可以通过返回 true 或 false 控制请求的后续处理。
  • postHandle(): 在 Controller 执行之后执行,可以在此处对 ModelAndView 进行修改。
  • afterCompletion(): 在整个请求处理完成后调用,常用于资源清理。

2. 注册 Interceptor

接下来我们需要在 Spring 配置文件中注册这个 Interceptor。通常在配置类中定义:

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 {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor())
                .addPathPatterns("/**"); // 监听所有请求
    }
}

注释:

  • addInterceptors(): 用于注册自定义的 Interceptor。
  • addPathPatterns(): 指定需要拦截的请求路径。

3. 流程图

为了更好的理解处理流程,下面是相应的流程图:

flowchart TD
    A[请求到达] --> B[PreHandle]
    B -->|true| C[Controller]
    B -->|false| D[结束请求]
    C --> E[PostHandle]
    E --> F[AfterCompletion]
    F --> G[结束请求]

结尾

通过以上的讲解,我们学习了如何实现和配置 Java 的 HandlerInterceptor,以及它们在处理请求过程中的执行顺序。这不仅能帮助我们更好地管理请求的生命周期,还能使我们在实际开发中实现一些通用的功能,比如日志记录和权限控制。希望你能在实际项目中灵活应用这些知识,提升自己的开发水平!

举报

相关推荐

0 条评论