【Spring Boot】拦截器的使用

news2024/12/23 13:39:37

目录

前言

拦截器的使用

1.创建一个拦截器

2.注册拦截器

3.配置拦截器的匹配规则

拦截器的实际使用场景

拦截器 vs 过滤器 vs AOP


前言

在Spring Boot中,拦截器(interceptor)是一种用于拦截和处理请求的机制。通过拦截器,可以在请求到达控制器之前,响应发送到客户端之前进行一些预处理或后处理操作

拦截器的使用

1.创建一个拦截器

要使用拦截器,首先需要创建一个实现‘HandlerInterceptor’接口的类。这个类中包含三个主要方法

  • preHandler:在请求处理之前执行。可以用于验证权限,日志记录等。
  • postHandler:在请求处理之后,视图渲染之前执行。可以用于修改‘ModelAndView’,添加一些全局的数据。
  • afterCompletion:在整个请求结束之后执行。可以用于记录日志,清理资源等。

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

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("开始请求辣");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        log.info("我是请求后");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.info("我是请求完成");
    }
}

2.注册拦截器

创建好拦截器后,你需要将它注册到 Spring 的拦截器链中。通常在配置类中实现 WebMvcConfigurer 接口,并在其中注册拦截器。

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
    private MyInterceptor myInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor)
                .addPathPatterns("/api/**")    // 指定拦截路径
                .excludePathPatterns("/api/auth/**");  // 指定不拦截路径
    }
}

3.配置拦截器的匹配规则

在注册拦截器时,可以通过 addPathPatternsexcludePathPatterns 方法来配置拦截器的路径匹配规则:

  • addPathPatterns("/api/**"):拦截所有以 /api/ 开头的请求路径。
  • excludePathPatterns("/api/auth/**"):排除以 /api/auth/ 开头的路径,不进行拦截。

输出结果

拦截器的实际使用场景

拦截器可以用于多种场景,例如:

  • 认证与授权:在 preHandle 方法中验证请求是否包含有效的身份验证信息,若不合法则直接返回错误响应。
  • 日志记录:在 postHandleafterCompletion 方法中记录请求的执行情况、处理时间等日志信息。
  • 全局数据注入:在 postHandle 方法中向 ModelAndView 中添加一些全局的数据,如当前用户信息、系统时间等。

拦截器 vs 过滤器 vs AOP

  • 拦截器(Interceptor):基于 Spring MVC,主要用于拦截和处理控制器的请求,适合对请求的前后进行处理。
  • 过滤器(Filter):基于 Servlet,是更底层的机制,适用于所有的请求(包括静态资源等),常用于全局性的请求处理,如编码设置、跨域处理等。
  • AOP(面向切面编程):用于横切关注点的处理,如事务管理、日志记录等,可以在方法执行前后进行增强处理,不限于 HTTP 请求。

总结

在 Spring Boot 中,拦截器是一种非常强大的机制,用于在请求处理流程的不同阶段执行特定的逻辑。通过灵活地配置拦截器的匹配规则,你可以精确地控制拦截器的作用范围,为应用添加认证、日志、性能监控等功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2047973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊天机器人正在膨胀技术

API 在软件中发挥的作用比任何其他东西都要大 当团队与外部 API(包括第三方 AI)集成时,他们可以将预制的外部功能引入产品中。我使用 API 让用户根据matchboxxr上的提示生成 3D 模型。 但是,尽管越来越多的初创公司只关注人工智能…

Java开发工具IDEA入门指南——如何从VS Code迁移到IDEA?(一)

IntelliJ IDEA是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的Java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 在本文中&#x…

【java基础】IDEA 的断点调试(Debug)

目录 1.为什么需要 Debug 2.Debug的步骤 2.1添加断点 2.2单步调试工具介绍 2.2.1 Step Over 2.2.2 Step Into 2.2.3 Force Step Into 2.2.4 Step Out 2.2.5 Run To Cursor 2.2.6 Show Execution Poiint 2.2.7 Resume Program 3.多种 Debug 情况介绍 3.1行断点 3.2方…

XSS GAME

源网站:XSS 游戏 - 学习 XSS 变得简单! |创建者 PwnFunction 以下为解码工具: 在线 JSFuck 加密 - 百川在线工具箱 (chaitin.cn) CyberChef 1、Ma Spaghet! 条件 Difficulty is Easy.Pop an alert(1337) on sandbox.pwnfunction.com.No…

分析FP -Growth代码运行内存太大而无法运行的原因

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

随记 - 2024 年 4 月 12 日

写在前面 444 字 | 生活 | 经历 | 感触 正文 或许因为压力大,亦或者简单的糖分不足,今晚好想吃面包和蛋糕。 蛋糕吃不完也买不起,面包还是可以。 实在饿,出门了。 导航两家西点店,关门。怏怏地找另一家。 在十点前&a…

效果炫酷的3D翻转书特效WordPress主题模板MagicBook主题v1.19

正文: MagicBook是一款支持3D翻书特效的书籍WordPress主题。支持可视化页面搭建,3D菜单,完全自适应设计,WPML多语言支持。 这款主题一定会让你爱不释手。虽然他是英文的,但不可不承认的是,它优雅的设计会让你愿意花时…

[Linux]将一个文件复制到多个文件夹下

一、简介 本文介绍了在linux下如何使用cp命令将一个文件复制到多个文件夹、多个文件复制到一个文件夹和多个文件复制到多个文件夹下。 二、代码 假设初始时test/文件夹的结构如下: 1. 将一个文件复制到多个文件夹 a.命令示例 将file1复制到目录des_dir1/&#…

【PGCCC】pg_bestmatch.rs:使用 BM25 提升您的 PostgreSQL 文本查询#PCA

这是一个 PostgreSQL 扩展,它将最佳匹配 25 分数 (BM25) 文本查询的强大功能引入您的数据库,从而增强您执行高效和准确的文本检索的能力。此扩展允许用户从文本生成 BM25 统计稀疏向量,利用 BM25 在各种基准测试任务中经过验证的性能。 为什…

8.16 QT

1.思维导图 2 将day1做的登录界面升级优化【资源文件的添加】 2> 在登录界面的登录取消按钮进行一下设置: 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5…

《SPSS零基础入门教程》学习笔记——03.变量的统计描述

文章目录 3.1 连续变量(1)集中趋势(2)离散趋势(3)分布特征 3.2 分类变量(1)单个分类变量(2)多个分类变量 3.1 连续变量 (1)集中趋势 …

使用 Python 解密加密的 PDF 文件

使用 Python 进行 PDF 文件加密-CSDN博客文章浏览阅读89次,点赞2次,收藏2次。定义一个名为的函数,该函数接受三个参数:输入的 PDF 文件路径input_pdf、输出的加密 PDF 文件路径output_pdf和密码password。https://blog.csdn.net/q…

django中的MESSAGE组件

文章目录 message组件1 使用配置2 设置值3 读取值4 源码分析 message组件 1 使用配置 INSTALLED_APPS [# django.contrib.admin,# django.contrib.auth,# django.contrib.contenttypes,# django.contrib.sessions,django.contrib.messages,django.contrib.staticfiles,"…

AI编程工具合集【请按需收藏】

成长路上不孤单😊【14后小学生一枚,C爱好者,持续分享所学,如有需要欢迎收藏转发😊😊😊😊😊😊😊】 关于【AI编程工具合集】 在编程领域&#xff0c…

C ICU webassembly库编译

准备环境 在本机搭建Linux环境_本地单机搭建linux系统-CSDN博客 C wasm 使用教程-CSDN博客 法一 git clone https://github.com/mabels/icu.git git checkout -b release-65-1 git diff -p wasm32-start..remotes/origin/wasm32 | patch -p1 cd icu4c/source ./runConfigu…

C#工具库-NPOI

一、简介 NPOI是一个基于c#语言的,开源的,能够在不安装Microsoft Office组件的条件下读写Microsoft Office 的库。前身是Java的POI库,有“先贤”将其翻译成了c#语言的库,而这种由java到c#库的演变并非个例,比如DotNetty之于Netty,…

云动态摘要 2024-08-17

给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 最新优惠与活动 注册阿里云免费领云服务器_云服务器ECS_阿里云 阿里云 2024-08-14 云上试用新玩法,个人享300元免费额度,企业享660元免费额度,多种规格随心试 [免费体验…

恒创科技:云服务器的备份和快照哪个更好?

云服务器的备份和快照都是为了保护数据和恢复系统状态的重要手段,但它们有不同的应用场景和特点。在本指南中,我们将探讨这些数据管理方法之间的差异、它们的优点和局限性。 什么是备份? 想象一下,备份就是数据的“时间胶囊”。它们就像老相…

蓝盆花:神秘而迷人的自然之美

一、蓝盆花的形态特征 蓝盆花是多年生草本植物,植株高度通常在30 – 80厘米之间。茎直立,黄白色或带紫色,具棱,自基部分枝,节间长6 – 12厘米,疏或密被贴伏白色短柔毛。 蓝盆花的叶形态多样。基生叶成丛&a…

Nginx 核心配置详解

章节 1 NGINX 的源码安装 2 NGINX 核心配置详解 3 NGINX 之 location 匹配优先级 4 NGINX 基础参数与功能 目录 1 配置文件说明 1.1 nginx 配置文件格式说明 1.2 Nginx 主配置文件的配置指令方式: 1.3 主配置文件结构:四部分 1.4 nginx 文件作用解…