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

总结

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

相关推荐
蜘蛛侠..7 分钟前
Java中的阻塞队列
java·开发语言·优先级队列·阻塞队列·无界队列·有界队列·数组结构
汪子熙11 分钟前
浅谈笔者对 AI 技术降低软件项目开发成本的一些思考
后端
洛阳泰山14 分钟前
【开源项目】MaxKB4J基于java开发的工作流和 RAG智能体的知识库问答系统
java·人工智能
IT-ZXT88817 分钟前
Spring 框架之IOC容器加载重要组件
java·后端·spring
用户67570498850220 分钟前
HTTP2.0 从原理到实践,保证把你治得服服帖帖!
后端
xlsw_38 分钟前
MyBatis之测试添加功能
java·开发语言·mybatis
noravinsc1 小时前
django paramiko 跳转登录
后端·python·django
声声codeGrandMaster1 小时前
Django之表格上传
后端·python·django
ghie90901 小时前
SpringCloud-基于SpringAMQP实现消息队列
后端·spring cloud·ruby
保持学习ing1 小时前
黑马Java面试笔记之 消息中间件篇(RabbitMQ)
java·微服务·面试·java-rabbitmq