【Spring Boot 3】自定义拦截器

news2024/9/20 1:10:05

【Spring Boot 3】自定义拦截器

  • 背景
  • 介绍
  • 开发环境
  • 开发步骤及源码
  • 工程目录结构
  • 总结

背景

软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费或多或少的时间、检索不止一篇资料才能得出一个可工作的DEMO,这占用了我大量的时间精力。因此本文旨在通过一篇文章即能还原出可工作的、甚至可用于生产的DEMO,期望初学者能尽快地迈过0到1的这一步骤,并在此基础上不断深化对相关知识的理解。
为达以上目的,本文会将开发环境、工程目录结构、开发步骤及源码尽量全面地展现出来,文字描述能简则简,能用代码注释的绝不在正文中再啰嗦一遍,正文仅对必要且关键的信息做重点描述。

介绍

本文介绍开发 Spring Boot 应用如何自定义拦截器(Interceptor)实现。

Spring Boot 拦截器(Interceptor)基于 Java 反射机制实现,可以对 Controller 中方法进行拦截,并在方法执行前后进行相应处理,是基于切面编程(AOP)的一种模式。拦截器(Interceptor)通常的应用场景包括:

  • 权限校验
  • 日志记录
  • 性能监控

拦截器(Interceptor)通常拿来与过滤器(Filter)进行比较,虽然它们在应用上存在诸多重叠,但实现原理完全不同。过滤器基于 Servlet 规范,可对所有 Servlet 请求进行预处理或后处理。过滤器(Filter)通常的应用场景包括:

  • 编码转换
  • 安全校验
  • 请求链路跟踪

拦截器(Interceptor)与过滤器(Filter)的关键区别:

  • 过滤器(Filter)主要作用在 Servlet 生命周期的各环节中,用于处理网络请求;
  • 拦截器(Interceptor)作用范围不局限于网络请求,作用于具体业务方法,粒度更细。

从下图中可以看出拦截器(Interceptor)与过滤器(Filter)的作用顺序。
在这里插入图片描述

开发环境

分类 名称 版本
操作系统 Windows Windows 11
JDK Oracle JDK 21.0.1
IDE IntelliJ IDEA 2023.3.7
构建工具 Apache Maven 3.9.9

开发步骤及源码

1> 创建Maven工程,添加依赖。

<?xml version="1.

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

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

相关文章

茶余饭后(六)

有人孤立你&#xff0c;证明你强大&#xff1b;有人嫉妒你&#xff0c;证明你出众&#xff1b;有人诋毁你&#xff0c;证明你有能力&#xff1b;有人议论你&#xff0c;证明你有价值&#xff1b;有人利用你&#xff0c;证明你有能力。所以原谅那些诋毁你的人&#xff0c;至少他…

到处在裁员,这个行业却在疯狂招人!

1.裁员浪潮不断 8月26日&#xff0c;IBM中国方面确认了将关闭中国研发部门的消息&#xff0c;这一决策涉及员工数量超过1000人。技术迭代浪潮前&#xff0c;哪怕是名企&#xff0c;攻守防退之间的转换也只在一瞬间。AI引发大裁员&#xff1f;这表明IBM正在积极适应技术变革&am…

win10配置adb环境变量

初始状态&#xff1a; 最简单的配置方案&#xff0c;直接复制adb所在路径&#xff1a; 粘贴进来确定即可&#xff1a; 然后打开 cmd 查看已经配置成功了&#xff1a;

MATLAB 手写Ply文件点云读取类(86)

MATLAB 手写Ply文件点云读取类(86) 一、算法介绍二、算法实现1.PLYReader.m 类文件2.可视化一、算法介绍 PLY是一种常见的点云文件格式,这里尝试手写一个读点云的类,查看是否能正常读取,结果将可视化,具体代码如下: 二、算法实现 1.PLYReader.m 类文件 classdef PLYR…

优秀的开源项目

目录 热key 多线程并行 秒级百G级日志工具 ES操作工具 消息推送平台 HTTP 客户端 业务层的分布式限流组件 企业级微服务解决方案 热key hotkey: 京东App后台中间件&#xff0c;毫秒级探测热点数据&#xff0c;毫秒级推送至服务器集群内存&#xff0c;大幅降低热key对数…

MinIo - java代码 实现图片上传至Minio桶

MinIO是一款开源的高性能、可伸缩、安全的对象存储系统,专为云原生和容器化环境而设计 (基于minio已经集成在服务器中) 第一步,毫无疑问肯定是创建一个桶(用于存放的容器) 这个Name根据自己的需求自定义 然后点击Create Bucket 可以看见新创建的桶已经完成 点击新创建的…

es集群详解

1、集群的介绍&#xff1a; 1.1、单机的elasticsearch做数据存储 必然面临两个问题&#xff1a;海量数据存储问题、单点故障问题。海量数据存储问题&#xff1a;将索引库从逻辑上拆分为N个分片&#xff08;shard&#xff09;&#xff0c;存储到多个节点。从逻辑上&#xff0c…

docker 镜像仓库的管理

目录 1 docker 镜像仓库介绍 1.1 什么是docker仓库 1.2 docker hub 2 docker仓库的工作原理 2.1 仓库中的三个角色 2.2 pull原理 2.3 push原理 3 使用互联网上提供的托管镜像仓库 3.1 docker hub 镜像仓库 3.1.1 docker hub 镜像仓库介绍 3.1.2 docker hub的使用方法 4 搭建doc…

数据仓库系列11:ETL的主要步骤是什么,它们分别有什么作用?

你是否曾经感觉被海量数据淹没?是否在寻找一种方法来有效地整合、转换和加载这些数据?如果是,那么你来对地方了。今天,我们将深入探讨ETL(Extract, Transform, Load)过程的三个关键步骤,这是每个大数据开发者都应该掌握的核心技能。准备好踏上成为数据整合大师的旅程了吗?让…

Dubbo源码解析之@DubboService、@DubboReference(Dubbo源码一)

更好的阅读体验&#xff1a;Dubbo源码解析之DubboService、DubboReference&#xff08;Dubbo源码一&#xff09; 视频讲解&#xff1a;https://www.bilibili.com/video/BV1nBsMejEbL 对于Dubbo用的最多的就是DubboService、DubboReference&#xff0c;与之对应的就是服务的提供…

diskgenuis打开vmdk文件提示读扇区错误

使用DiskGenius_V5_2_x86打开iKuai-0.vmdk 读扇区错误&#xff01; 磁盘: 起始于 0 扇区 共 1 个扇区。 (Err:0) 读扇区错误&#xff01; 磁盘: VD0:iKuai-0.vmdk(2GB) 起始于 0 扇区 共 2 个扇区。 (Err:0) 更换官网最新版本 https://www.diskgenius.cn/download.php 可…

一个PPT做3天?有这3个AI做PPT工具再也不发愁!

ppt是什么东西&#xff1f; ppt是英文Powerpoint的缩写&#xff0c;它是微软出品的演示文稿软件&#xff0c;因为其在演示领域的领导地位&#xff0c;也让它成为幻灯片或演示文稿的代名词。 一个完整的ppt&#xff0c;通常包含很多要素&#xff0c;如ppt封面页、ppt目录页、p…

解决Java中Long类型的序列化与JDK8时间的序列化

1.背景 SpringBoot与前端交互 这个场景下Long类型与前端JS交互时会存在精度丢失&#xff0c;根本原因是JS的Number支持不到19位&#xff0c;所以需要后端将Long类型的值转为StringJDK8的时间类 JDK8的时间类比如LocalDateTime、LocalDate 在交互时序列化默认格式是 “yyyy-MM-…

LLM 应用开发入门 - 实现 langchain.js ChatModel 接入火山引擎大模型和实现一个 CLI 聊天机器人(上)

前言 Langchain 是一个大语言模型(LLM)应用开发的框架,提供了 LLM 开发中各个阶段很多非常强大的辅助工具支持。对于进行 LLM 开发是必不可少的工具库。 本文将通过一个实际的开发例子来入门 LLM 开发基础工具链,并实现 langchain.js ChatModel 接入火山引擎大模型和基于…

【Python入门】第4节 函数

&#x1f4d6;第4节 函数 ✅函数介绍✅函数的定义✅函数的参数✅函数的返回值&#x1f9ca;None类型的应用场景 ✅函数说明文档✅函数的嵌套调用✅变量的作用域 ✅函数介绍 函数是&#xff1a; 组织好的、可重复使用的、用来实现特定功能的代码段使用函数的好处是&#xff1a;…

erlang学习:用OTP构建系统1

书上案例学习并测试 23.1 通用事件处理 -module(event_handler). %% API -export([make/1, add_handler/2, event/2]).%% 制作一个“什么都不干”的事件处理器Name&#xff08;一个原子&#xff09;。这样消息就有地方发送了。 make(Name) ->register(Name, spawn(fun() -…

SpringSpring搭建SpringJdbcTemplateSpring Bean管理Spring结合Mybatis

Spring基础 Spring是什么 Spring是一个轻量级的IOC和AOP的一站式Java开发框架,是为了简化企业级开发而生的 轻量级 框架体积小(核心模块) IOC Inversion Of Control (控制反转)缩写为IOC,是由Spring管理对象,而非传统实现中由程序代码直接操控,将创建对象的控制权反转给s…

8月28日

思维导图 作业&#xff1a; 使用C手动封装一个顺序表&#xff0c;包含成员数组一个&#xff0c;成员变量N个 代码&#xff1a; #include <iostream>using namespace std;using datatype int; #define MAX 30struct SeqList {private:datatype *data;int size 0;int l…

Kafka3.x 使用 KRaft 模式部署 不依赖 ZooKeeper

前言 Kafka 从 2.8.0 版本开始引入了 Kafka Raft Metadata Mode&#xff08;KRaft 模式&#xff09;&#xff0c;这个模式允许 Kafka 在不依赖 ZooKeeper 的情况下进行元数据管理。KRaft 模式在 Kafka 3.0.0 中进入了稳定版本,本文部署的 Kafka_2.12-3.6.0 单机模式 环境 Ce…

Android插件化技术之加载未安装APK

目录 1、概述2、HOOK技术2.1、根据Android9.0系统源码&#xff0c;查看Activity.startActivity(intent,...)的调用流程2.2、根据Android9.0系统源码&#xff0c;查看Context.startActivity(intent,...)的调用流程 3、最终解决方案3.1、实现思路3.2、演示效果 4、最终代码实现4.…