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将拦截所有的请求

总结

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

相关推荐
Oneslide6 小时前
Ubuntu 26.04 完整安装 Fcitx5 中文拼音输入法指南(适配默认Wayland)
后端
huangdong_6 小时前
电商平台图片URL原图转换技术深度解析:从缩略图到高清原图的完整方案
java·后端·spring
記億揺晃着的那天7 小时前
Java 调用外部 Go 程序的实践:ProcessBuilder 在生产环境中的应用
java·golang·processbuilder
掘金码甲哥7 小时前
3min手搓一个帮助文档站,很合理吧!
后端
JAVA面经实录9177 小时前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
llz_1127 小时前
web-第四次课后作业
前端·spring boot·web
JAVA面经实录9178 小时前
操作系统面试题
java·服务器·数据库·计算机网络·面试
一杯奶茶¥8 小时前
基于springboot的失物招领管理系统带万字文档 校园失物招领管理系统 失物认领管理系统java springboot vue
java·vue.js·spring boot·java项目
不能只会打代码8 小时前
边缘视频分析平台的架构设计与性能优化——从750ms到190ms的调优之路
java·spring boot·redis·性能优化·边缘计算·物联网竞赛
小刘|8 小时前
Spring AI Alibaba 集成和风天气 API 实战
java·服务器·前端