若依框架中有Sensitive注解,但代码中并未使用,但该注解的实现还是比较值的学习的。

在这里插入图片描述

  1. 该注解是一个运行时注解
  2. 该注解只能应用在字段上
  3. JacksonAnnotationsInside 表示当使用Jackson序列化时,Jackson会自动识别该注解下的其他Jackson相关注解,也就是JsonSerialze, 如果没有JacksonAnnotationsInside 注解,jackson序列化过程中不会识别JsonSerialize注解,该注解无效。
  4. JsonSerialize 核心注解,序列化过程中调用
  5. 注解参数desensitizedType 指明是密码、邮箱还是其他需要脱敏的类型。

下面查看 SensitiveJsonSerializer 序列化类的实现方式

ContextualSerializer 是 Jackson
提供的一个接口,允许序列化器(JsonSerializer)根据字段或方法的上下文信息(如注解、类型等)动态调整序列化行为。它通过 createContextual() 方法实现,该方法在序列化前被调用。

createContextual

第一个参数prov是Jackson 的序列化工具,可用于获取配置信息,第二个字段是当前字段/方法的元信息,可获取注解、类型等
在这里插入图片描述

  • 如果当前字段有Sensitive注解修饰,且该字段是String类型,则将该字段对应的desensitizedType保存,也就是邮箱、密码还是其他类型。

  • findValueSerializer 默认情况:使用 Jackson 默认的序列化器

serialize

在序列化过程中调用serialize()方法

@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {if (desensitization()) {  // 检查是否需要脱敏gen.writeString(desensitizedType.desensitizer().apply(value)); // 调用脱敏逻辑} else {gen.writeString(value); // 直接输出原值}
}

第一个参数是要序列化的原值
第二个参数是Jackson 的 JSON 生成器,用于写入处理后的值。
第三个参数是提供序列化上下文(通常用不到)。

desensitization() 含义是:如果是admin不进行任何脱敏,注解获取明文值

desensitizedType.desensitizer().apply(value) 含义是执行对应类型的脱敏方法,最终实现脱敏
在这里插入图片描述

举个例子

在用户表中将邮箱设置为脱敏信息
在这里插入图片描述
前端使用普通用户登录,可以看到 邮箱已经变成密文了
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git本地仓库,工作区和暂存区的知识

一 git工作原理 Git 的工作原理基于分布式版本控制,通过管理文件的不同版本状态,实现代码的追踪、协作和回溯。除了常见的工作区(Working Directory) 和暂存区(Staging Area/Index),核心还包括本…

MPU6050模块

一:MPU6050简介输出一个随姿态变化而变化的电压,想要量化电压,就得使用ADC转化欧拉角偏航角(Yaw):也叫航向角,通常是绕 z 轴旋转的角度,以 x 轴正向为起始边,旋转后 x 轴…

jvm的栈和堆

在 JVM 中,栈(Stack)和堆(Heap)是两种核心内存区域,用于存储不同类型的数据,它们的设计和存储规则有明确区分,主要体现在存储内容、生命周期和管理方式上:一、栈&#xf…

自动驾驶车辆的敏捷安全档案

简介近年来,在开发安全关键软件时,敏捷开发方法的使用日益增多。敏捷方法非常适合自动驾驶汽车软件的增量改进、运行设计域的逐步扩展以及新型智能路侧单元的开发。由于车辆和智能路侧单元的预期改进,未来几年将会有新的自动驾驶车辆试验。因…

【时时三省】(C语言基础)动态内存分配与它的指针变量

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省什么是内存的动态分配全局变量是分配在内存中的静态存储区的,非静态的局部变量(包括形参)是分配在内存中的动态存储区的,这个存储区是一个称为栈…

SpringMVC的核心架构与请求处理流程

Spring MVC 核心架构核心组件组件作用类比DispatcherServlet前端控制器,统一接收请求并协调各组件处理一个餐厅的前台HandlerMapping根据请求URL映射到对应的处理器(Controller)路由表HandlerAdapter执行处理器方法,处理参数绑定、…

css 不错的按钮动画

效果图wxml <view class"{{status?active:}}"><view class"up-top btn"><text>向上</text></view><view class"up-left btn"><text>向左</text></view><view class"up-center b…

若依框架RuoYi-Vue-Plus-5.X的启动,本地安装docker,再部署 Redis、PG数据库(智慧水务)SmartWaterServer

一、部署redis数据库拉取镜像 docker pull redis启动Redis容器docker run -d --name redis-server -p 6379:6379 -v redis-data:/data redis redis-server --requirepass 123redis版本二、部署PostgreSQL 数据库拉取镜像docker pull postgres:15 创建数据存储目录、建议将数据挂…

Idea 清除无用的引用类

在IntelliJ IDEA中&#xff0c;你可以通过以下方式将选中的代码设置为大写&#xff1a;1. 使用快捷键(推荐)Windows/Linux&#xff1a;Ctrl Shift UMac&#xff1a;Cmd Shift U操作步骤&#xff1a;选中文本按下快捷键&#xff0c;即可在大小写之间切换。2. 通过菜单操作选…

同个主机拉取不同权限仓库的方法

背景&#xff1a;因为某些神奇的原因&#xff0c;无法同时授权仓库权限给自己。 1.本地电脑只有权限访问web仓库地址&#xff0c;无权限访问backend仓库&#xff1b; 2.堡垒机服务器只有权限访问backend仓库&#xff0c;无权限访问web仓库地址。 web仓库地址 &#xff1a;codeu…

快速搭建Node.js服务指南

Node.js是构建高效、可扩展网络应用的理想选择。以下是几种快速搭建Node.js服务的方法。 方法一&#xff1a;使用Express&#xff08;最流行框架&#xff09; 1. 初始化项目 mkdir my-node-service cd my-node-service npm init -y2. 安装Express npm install express3. 基础服…

通义千问Qwen3-30B-A3B-Thinking-2507技术解析:推理模型的工程实践突破

Qwen3-30B-A3B模型架构图2025年7月30日&#xff0c;阿里云通义千问团队发布了Qwen3-30B-A3B-Thinking-2507推理模型&#xff0c;这是继Qwen3-30B-A3B-Instruct-2507后的又一力作。作为专注于推理任务的专用模型&#xff0c;它在数学能力测试AIME25上取得85.0分&#xff0c;超越…

【源力觉醒 创作者计划】文心一言与deepseek集成springboot开发哪个更方便

一.实验背景 当前文心一言和deepseek都开源了&#xff0c;二者都可以作为大模型应用开发的模型基础了&#xff0c;我们都可以编写springboot项目来集成deepseek和文心一言了 二.实验目标 本文基于实际操作&#xff0c;通过实际操作来对比文心一言和deepseek在集成到springbo…

核磁共振数据T2几何均值计算

1、T₂ 几何均值公式如下&#xff1a;2、核磁T2几何均值计算代码 CSV 文件文件格式&#xff1a; 每一行是一个样点&#xff08;样品深度&#xff09;&#xff0c;列为&#xff1a;第一列是“深度”或其他&#xff1b;第二列及以后&#xff08;如 TASPEC0 ~ TASPEC199&#xff0…

微服务架构技巧篇——接口类设计技巧

目录 一、微服务架构的特点 二、微服务接口类设计技巧 2.1、BFF(Backend For Frontend) 2.1.1、 服务分布式带来的第一个挑战导致的几个典型问题 2.1.2、什么是 BFF 2.1.3、BFF 应用场景 2.1.4、BFF 落地经验 2.1.4.1、前端负责 BFF 开发优缺点 2.1.4.2、后端负责 BFF 开发优…

C++游戏开发(2)

直接上代码 1.首先是头文件编写 #include <iostream> #include <graphics.h> #include <string> 2,添加画布 长1280&#xff0c;宽720 initgraph(1280, 720); 3.添加主循环 bool running true; while(runing) { } 4.定义结构体变量msg ExMessge msg; 5.开…

Unity开发2D类银河恶魔城游戏学习笔记目录

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 玩家状态机 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现…

智慧社区项目开发(三)——基于 Spring Boot 实现动态路由加载:从数据库到前端菜单的完整方案

在后台管理系统中&#xff0c;不同用户角色往往拥有不同的操作权限&#xff0c;对应的菜单展示也需动态调整。动态路由加载正是解决这一问题的核心方案 —— 根据登录用户的权限&#xff0c;从数据库查询其可访问的菜单&#xff0c;封装成前端所需的路由结构并返回。本文将详细…

Python在自动化与运维领域的核心角色:工具化、平台化与智能化

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 引言 在 IT 系统日益复杂、运维任务持续增长的今天&#xff0c;自动化已成为企业基础设施管理的关键方向。Python 以其简洁的语法、强大…

RAG实战指南 Day 28:RAG系统缓存与性能优化

【RAG实战指南 Day 28】RAG系统缓存与性能优化 开篇 欢迎来到"RAG实战指南"系列的第28天&#xff01;今天我们将深入探讨RAG系统的缓存机制与性能优化策略。在实际生产环境中&#xff0c;RAG系统往往面临高并发、低延迟的需求&#xff0c;而合理的缓存设计和性能优…