Spring Boot(十六):拦截器Interceptor

拦截器的简介

拦截器(Interceptor)​是Spring框架中的概​念,它同样适​用于Spring Boot,​因为Spring Boot是基于Spring框架的。拦截器是​一种AOP(面向切面编程)​的轻量级实现方式,它允许我们在请求处理之前、请求处理之后及请求完成视图渲染完毕后执行一些自定义逻辑。

拦截器的生命周期

拦截器的生命周期主要包含三个关键方法:

preHandle:在请求到达Controller之前执行,返回true表示继续执行后续处理,返回false表示中断后续处理。通常用于身份验证和授权、日志记录等。

postHandle:在Controller执行之后,视图渲染之前执行。可以对模型数据进行操作或对视图进行处理。

afterCompletion:在整个请求处理完成并且视图渲染完毕后执行,通常用于释放资源或者记录日志。

拦截器的使用

1、定义拦截器

创建一个类实现HandlerInterceptor接口,并实现preHandle、postHandle和afterCompletion方法

复制代码
@Slf4j
public class AccessInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在请求到达Controller之前执行
        // 可以进行身份验证和授权、日志记录等
        log.info("preHandle:{}", System.currentTimeMillis());
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        // 在Controller执行之后,视图渲染之前执行
        // 可以对模型数据进行处理或对视图进行处理
        log.info("postHandle:{}", System.currentTimeMillis());
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        // 在整个请求处理完成并且视图渲染完毕后执行
        // 可以进行资源的释放或者记录日志等
        log.info("afterCompletion:{}", System.currentTimeMillis());
    }
}

2、配置拦截器

创建一个配置类实​现WebMvcConfigurer接口​,覆盖addInterceptors方法,将拦截器注册到应用程序中

复制代码
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new AccessInterceptor()).addPathPatterns("/**");
    }
}

在上述示例中,AccessInterceptor将拦截所有的请求

总结

拦截器主要用于身份验证和授权、日志记录、性能检测、通用行为的处理(如跨域处理、时区信息设置等),通过使用拦截器,我们可以在请求处理的不同阶段插入自定义逻辑,增强应用程序的功能和安全性。

相关推荐
jaysee-sjc1 分钟前
十七、Java 高级技术入门全解:JUnit、反射、注解、动态代理
java·开发语言·算法·junit·intellij-idea
卓怡学长3 分钟前
w1基于springboot高校学生评教系统
java·spring boot·tomcat·maven·intellij-idea
ruan1145143 分钟前
关于HashMap--个人学习记录
java·jvm·servlet
lvyuanj10 分钟前
Java AI开发实战:Spring AI完全指南
java·人工智能·spring
lifallen17 分钟前
如何保证 Kafka 的消息顺序性?
java·大数据·分布式·kafka
Geoking.17 分钟前
后端Long型数据传到前端js后精度丢失的问题(前后端传输踩坑指南)
java·前端·javascript·后端
Seven9725 分钟前
【从0到1构建一个ClaudeAgent】规划与协调-子Agent
java
宠友信息26 分钟前
社交软件源码哪个渠道好
java·微服务·架构·社交电子·springboot·uniapp
lizhongxuan28 分钟前
深入 Codex 沙盒
后端
improvement...29 分钟前
Maven 编译打包全指南:整体 / 逐个打包 + 核心参数详解
java·maven