SpringBoot 拦截器

SpringBoot 拦截器

SpringBoot 拦截器(Interceptor)是一种强大的工具,它允许我们在请求处理的不同阶段执行特定的操作。拦截器可以用于多种场景,如日志记录、身份验证、性能监控等。

1. 创建拦截器

要创建一个拦截器,我们需要创建一个类并实现 HandlerInterceptor 接口。这个接口定义了三个方法:

  • preHandle:在请求处理之前调用。如果返回 true,则继续执行下一个拦截器或处理器;如果返回 false,则中断执行。
  • postHandle:在请求处理之后、视图渲染之前调用。
  • afterCompletion:在请求处理完毕后调用。

下面是一个简单的拦截器示例:

java 复制代码
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        // 在请求处理之前执行的逻辑
        System.out.println("Pre Handle method is Calling");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) {
        // 在请求处理之后执行的逻辑
        System.out.println("Post Handle method is Calling");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        // 在请求处理完毕后执行的逻辑
        System.out.println("Request and Response is completed");
    }
}

2. 注册拦截器

创建拦截器后,我们需要将其注册到 SpringBoot 的应用程序中。这可以通过实现 WebMvcConfigurer 接口并重写 addInterceptors 方法来完成:

java 复制代码
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
    MyInterceptor myInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor).addPathPatterns("/**");
    }
}

在这个配置类中,我们使用 addInterceptor 方法将我们的拦截器添加到拦截器注册表中,并使用 addPathPatterns 方法指定拦截器应该拦截的路径模式。

3. 使用拦截器

一旦拦截器被注册,它将会自动拦截与其路径模式匹配的请求,并在相应的阶段执行定义的逻辑。

拦截器的使用可以帮助我们在请求处理的不同阶段执行特定的操作,提高应用程序的灵活性和可维护性。例如,我们可以在 preHandle 方法中实现身份验证逻辑,确保只有经过身份验证的用户才能访问受保护的资源。

结论

SpringBoot 拦截器是一种强大的工具,可以帮助我们在请求处理的不同阶段执行特定的操作。通过创建和注册自定义拦截器,我们可以增强我们的应用程序的功能和安全性。在实际开发中,拦截器的使用可以极大地提高应用程序的灵活性和可维护性。

参考链接

官网文档:SpringBoot 拦截器

相关推荐
Chase_______3 分钟前
【Java基础 | 16】集合框架(下):Map、HashMap 与 TreeMap
java·windows
Aaswk11 分钟前
Java项目:文件批量处理工具
java·开发语言·vscode·idea
ZengLiangYi13 分钟前
从 RAG 到知识图谱:个人知识管理的演进
数据库·后端·程序员
小江的记录本15 分钟前
【Spring全家桶】Spring AI核心原理、大模型集成、Prompt工程、RAG实现、AI Agent开发(附《思维导图》+《面试高频考点清单》)
java·人工智能·spring boot·后端·spring·面试·prompt
plainGeekDev18 分钟前
线程安全集合 → 协程安全替代
android·java·kotlin
手握风云-25 分钟前
Spring AI:让大模型住进 Spring 生态(五)
java·后端·spring
plainGeekDev25 分钟前
Timer → Coroutines
android·java·kotlin
doiito26 分钟前
【Agent Harness】有了 Oxigraph 图数据库,为什么我还要再塞一个 Qdrant 向量库?
后端
锋行天下26 分钟前
中小项目高可用,真的需要K8s吗?从单机备份到企业级架构的完整思考
后端·mysql·nginx
倚栏听风雨27 分钟前
spring @Primary 详解
后端