使用 Java 实现后端拦截器的指南

在 Java 后端开发中,拦截器是一种常用的工具。它可以在请求与响应之间插入自定义逻辑,比如身份验证、日志记录等。本文将指导一位开发小白如何实现一个简单的 Java 后端拦截器。

流程概述

以下是我们将要遵循的基本步骤:

步骤 描述
1 创建拦截器类
2 实现 HandlerInterceptor 接口
3 注册拦截器
4 测试拦截器
flowchart TD
    A[创建拦截器类] --> B[实现 HandlerInterceptor 接口]
    B --> C[注册拦截器]
    C --> D[测试拦截器]

步骤详解

1. 创建拦截器类

首先,我们需要创建一个拦截器类。这个类可以命名为 MyInterceptor

import org.springframework.stereotype.Component; // 导入Spring注解库

@Component // 标记为Spring组件,以便被自动扫描
public class MyInterceptor {
    // 方法将在请求处理前执行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("请求被拦截: " + request.getRequestURI());
        return true; // 返回true继续后续链,否则拦截请求
    }
}

2. 实现 HandlerInterceptor 接口

在创建拦截器类时,我们需要实现 HandlerInterceptor 接口。这个接口提供了三个方法:preHandlepostHandleafterCompletion

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) {
        System.out.println("请求被拦截: " + request.getRequestURI());
        return true; // 允许继续执行
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                            ModelAndView modelAndView) {
        // 处理请求后的逻辑
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        // 请求完成后的清理工作
    }
}

3. 注册拦截器

接下来,我们需要在 Spring Boot 的配置类中注册这个拦截器:

import org.springframework.beans.factory.annotation.Autowired; // 导入Autowired注解
import org.springframework.context.annotation.Configuration; // 导入配置类注解
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; // 导入注册库
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; // 导入WebMvc配置接口

@Configuration
public class WebConfig implements WebMvcConfigurer {
    
    @Autowired
    private MyInterceptor myInterceptor; // 注入拦截器类

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor) // 添加我们的拦截器
                .addPathPatterns("/**"); // 拦截所有请求路径
    }
}

4. 测试拦截器

要测试拦截器,你可以创建一个简单的控制器:

import org.springframework.web.bind.annotation.GetMapping; // 导入Get请求注解
import org.springframework.web.bind.annotation.RestController; // 导入控制器注解

@RestController
public class TestController {

    @GetMapping("/test")
    public String test() {
        return "Hello, Interceptor!";
    }
}

测试过程

接下来,你可以通过访问 /test 路径来验证拦截器是否生效。

sequenceDiagram
    participant Client
    participant Server
    Client->>Server: GET /test
    Server-->>Client: 请求被拦截
    Server-->>Client: Hello, Interceptor!

结论

通过以上步骤,我们成功地创建并实现了一个简单的 Java 后端拦截器。它在请求处理之前输出了请求 URI,并允许请求继续。在实际开发中,你可以在拦截器中加入更多的逻辑,比如验证用户身份、记录请求日志等。这将帮助你提高后端服务的灵活性和安全性。希望这篇文章能帮助到你,让你在后端开发的道路上更加顺利!