【RuoYi-Vue-Plus】学习笔记 28 - 数据脱敏 Json 序列化工具 SensitiveJsonSerializer(Jackson 源码)

2023-11-08

文章目录

前言

在框架 V4.0.0 版本更新了序列化脱敏的功能。
在这里插入图片描述
在 Demo 模块也增加了数据脱敏的测试类 TestSensitiveController,本文来简单分析一下该功能的调用流程。

参考目录

功能代码实现及测试

1、数据脱敏注解 Sensitive

在这里插入图片描述

2、脱敏策略枚举 SensitiveStrategy

在这里插入图片描述
这里所使用的的脱敏工具类底层是 Hutool 的 DesensitizedUtil

3、脱敏 Json 序列化器 SensitiveJsonSerializer

在这里插入图片描述

4、测试类 TestSensitiveController

在这里插入图片描述
需要注意的是,由于在序列化工具中定义了 admin 用户不进行数据脱敏,因此使用 test 用户进行测试,测试结果如下:
在这里插入图片描述

功能调用流程分析

##、流程简图(重点)

首先按照惯例,请记住这张图(后面的流程截图都是基于此):
在这里插入图片描述

温馨提醒,由于流程步骤较多(比起以往的多很多),结合这张图走不容易迷路

#1、处理返回结果 RequestResponseBodyMethodProcessor#handleReturnValue

由于前置步骤较多,这里从 REST 请求的处理返回值方法开始进行分析,这里是 Spring Web MVC REST 处理流程的其中一个步骤(处理 HandleMethod 执行结果),如果不熟悉的话可以找相关资料复习一下,这里不做详细说明。
在这里插入图片描述
在这里插入图片描述
执行过程:
在这里插入图片描述

#2、使用消息转换器转换返回结果 AbstractMessageConverterMethodProcessor#writeWithMessageConverters

在该方法中有以下执行步骤:

  1. 判断返回值类型是否是字符类型?
    否 —— 解析返回值类型 R
    在这里插入图片描述
  2. 判断是否是资源类型?

    在这里插入图片描述
  3. 判断是否设置了 contentType ?
    否 —— 获取 selectedMediaType 为 application/json
    在这里插入图片描述
  4. 遍历所有消息转换器,使用转换器写出消息。
    在这里插入图片描述

#3、AbstractGenericHttpMessageConverter#write

在这里插入图片描述

#4、AbstractJackson2HttpMessageConverter#writeInternal

在这里插入图片描述
在这里插入图片描述

#5、返回值序列化为JSON对象 com.fasterxml.jackson.databind.ObjectWriter#writeValue

在这里插入图片描述

#6、Prefetch#serialize

在这里插入图片描述

#7、DefaultSerializerProvider#serializeValue

在这里插入图片描述

#8、DefaultSerializerProvider#_serialize

在这里插入图片描述

#9、BeanSerializer#serialize

在这里插入图片描述

#10、循环序列化返回值对象所有字段 BeanSerializerBase#serializeFields

在这里插入图片描述

#11、BeanPropertyWriter#serializeAsField

#11.1、判断Json序列化器是否为空?

注:第一次请求时为空,后续请求不为空。

是:获取序列化器 BeanPropertyWriter#_findAndAddDynamic
否:执行步骤 #26 序列化。

#11.2、获取序列化器 BeanPropertyWriter#_findAndAddDynamic

在这里插入图片描述

#12、BeanPropertyWriter#_findAndAddDynamic

在这里插入图片描述

#13、PropertySerializerMap#findAndAddPrimarySerializer

在这里插入图片描述

#14、SerializerProvider#findPrimaryPropertySerializer

在这里插入图片描述

#15、SerializerProvider#_createAndCacheUntypedSerializer

在这里插入图片描述

#16、BeanSerializerFactory#createSerializer

在这里插入图片描述
在这里插入图片描述

#17、BeanSerializerFactory#_createSerializer2

在这里插入图片描述

#18、BeanSerializerFactory#findBeanOrAddOnSerializer

在这里插入图片描述

#19、构造序列化器 BeanSerializerFactory#constructBeanOrAddOnSerializer

在这里插入图片描述
在这里插入图片描述
执行完后面的流程后获得的序列化器:
在这里插入图片描述

#20、获取所有Bean对象属性 BeanSerializerFactory#findBeanProperties

在这里插入图片描述
在这里插入图片描述

#21、循环构造BeanPropertyWriter BeanSerializerFactory#_constructWriter

在这里插入图片描述

#21.1、PropertyBuilder#buildWriter

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#22、PropertyBuilder#_constructPropertyWriter

在这里插入图片描述

#23、BeanPropertyWriter#BeanPropertyWriter

在这里插入图片描述
注:将 Json 序列化器保存到上下文中,后面调用不再需要新建。

#24、SerializerProvider#handlePrimaryContextualization

在这里插入图片描述

#25、创建自定义上下文序列化器 SensitiveJsonSerializer#createContextual

在这里插入图片描述

#26、SensitiveJsonSerializer#serialize

继续执行步骤 #11
在这里插入图片描述

#27、自定义数据脱敏 Json 序列化工具 SensitiveJsonSerializer#serialize

在这里插入图片描述

#27.1、获取脱敏策略,根据脱敏策略脱敏

在这里插入图片描述
在这里插入图片描述

#27.2、JsonGenerator 写出内容

在步骤 #27 方法中,不同字段对应了不同脱敏策略,由于逻辑比较简单可以自行理解,因此这里只展示其中一种,其他流程同理。

至此,完成了所有字段的序列化流程后,将向客户端返回 REST HTTP 消息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【RuoYi-Vue-Plus】学习笔记 28 - 数据脱敏 Json 序列化工具 SensitiveJsonSerializer(Jackson 源码) 的相关文章

随机推荐

  • Pandas: 使用read_excel、describe、loc方法求极差、变异系数与四分位数间距

    极差 最大值 最小值 变异系数 标准差 平均数 四分位间距 QU上四分位 QL下四分位 coding utf 8 import pandas as pd init data data init data summary xls data p
  • ICTCLAS2013 Java版本的使用方法

    这个工具是什么 先看看他的官方介绍吧 NLPIR汉语分词系统 又名ICTCLAS2013 主要功能包括中文分词 词性标注 命名实体识别 用户词典功能 支持GBK编码 UTF8编码 BIG5编码 新增微博分词 新词发现与关键词提取 张华平博士
  • PNP结算方法(后面可能有空再补充了)

    一些pnp的实验结论 1 yaw角稳定性上 在opencv中 SOLVEPNP UPNP SOLVEPNP EPNP SOLVEPNP DLS gt gt SOLVEPNP IPPE gt SOLVEPNP AP3P gt SOLVEPNP
  • 10 行代码,实现手写数字识别

    识别手写的阿拉伯数字 对于人类来说十分简单 但是对于程序来说还是有些复杂的 不过随着机器学习技术的普及 使用10几行代码 实现一个能够识别手写数字的程序 并不是一件难事 这是因为有太多的机器学习模型可以拿来直接用 比如tensorflow
  • react 项目中使用js-export-excel导出excel

    第一步 首先添加包 npm npm install js export excel yarn yarn add js export excel 第二步 组件引入 import ExportJsonExcel from js export e
  • 嵌入式FreeRTOS学习三,FreeRTOS任务的挂起和恢复

    二 任务的挂起和恢复 有时候我们需要暂停某个任务的运行 过一段时间以后在重新运行 这个时候要是使用任务删除和重建的方法的话 那么任务中变量保存的值肯定丢失了 FreeRTOS给我们提供了解决这种问题的方法 那就是任务挂起和恢复 当某个任务要
  • k8s通过Kuboard安装Metrics server报错的解决办法

    文章目录 通过Kuboard安装Metrics server 确认 metrics server 是否正常运行 确认 ApiService 是否正常 排查步骤1 根据ApiService的日志 查443端口 排查步骤2 metrics se
  • 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定

    1 关注微信公众号 公众平台安全助手 2 关闭该公众号的消息免打扰 如下 1 点击3个点 2 点击设置 3 关闭消息免打扰 如图所示 置灰
  • k8s之Deployment与service

    一 概念 pod 最小执行调度单元 Deployment 部署无状态应用 Daemonset 部署守护应用 Cronjob 部署定时任务 job 部署定时任务 statefulset 部署有状态应用 service endpoint ing
  • iOS上传App Store报错:this action cannot be completed -22421 解决方案

    iOS上传App Store报错 this action cannot be completed 22421 解决方案 参考文章 1 iOS上传App Store报错 this action cannot be completed 2242
  • 牛客 · 奇♂妙拆分

    奇 妙拆分 题目描述 在遥远的米 奇 妙 妙 屋里住着一群自然数 他们没事就喜欢拆 开自己来探 究 现在他们想知道自己最多能被拆分成多少个不同的自然数 使得这些自然数相乘的值等于被拆分的数 输入描述 第 1 1 1行输入一个整数 T
  • 一图看懂架构划分原则:技术划分 OR 领域划分?

    架构划分原则 技术划分 描述 按技术用途组织系统组件 典型示例 分层 多层 架构 组件按技术层组织 用户界面 与用户直接交互的部分 业务规则和核心处理 逻辑和算法 与数据库交互 数据存取和查询 数据库层 数据存储和管理 优点 当大部分更改与
  • Linux域名解析得到ip地址

    Linux下域名解析得到ip地址代码如下 include
  • Redis(持续完善....)

    1 Redis结构 Redis是一款基于内存的NoSQL数据存储服务 是非关系型的 是使用K V结构进行存储的 gt lt 基于内存 读写数据均在内存中直接操作 gt
  • 高性能Mysql——SQL执行计划分析(EXPLAIN)

    文章目录 通过EXPLAIN进行执行计划分析 ID select type Table Partitions Type Extra possible keys Key key len Ref Rows Filtered EXPLAIN不能完
  • int与float深入理解

    别在int与float上栽跟头 int与float是我们每天编程都用的两种类型 但是我们真的足够了解它们吗 昨天在博客园看到一个比较老的笑话 昨天晚上下班回家 一民警迎面巡逻而来 突然对我大喊 站住 民警 int 类型占几个字节 我 4 个
  • 记录Maven的相关操作(笔记整理)

    一 安装 我使用的是免安装版的 直接解压缩就可以使用 二 配置环境变量 打开环境变量配置 右键计算机 属性 高级系统设置 高级 环境变量 在系统变量中配置 配置MAVEN HOME 在系统变量中新建 变量名MAVEN HOME 变量值 ma
  • Swoole - 为什么说Swoole中小型企业微服务的首选技术方案

    概述 Swoole的出现 使PHP语言不再局限于传统的 Web领域 对中小企业有很好的支持 有一些企业盲目的追求微服务和K8s 我真诚建议不要轻易上微服务 上了你才知道这里面的辛酸 高成本 低效率会拖碎整个团队 研究中小企业的提效 节省成本
  • sql中on条件和where条件查询结果一样嘛?

    如果使用 join不会有影响 但是 在使用left join时 on和where条件的区别如下 on条件是在生成临时表时使用的条件 它不管on中的条件是否为真 都会返回左边表中的记录 where条件是在临时表生成好后 再对临时表进行过滤的条
  • 【RuoYi-Vue-Plus】学习笔记 28 - 数据脱敏 Json 序列化工具 SensitiveJsonSerializer(Jackson 源码)

    文章目录 前言 参考目录 功能代码实现及测试 1 数据脱敏注解 Sensitive 2 脱敏策略枚举 SensitiveStrategy 3 脱敏 Json 序列化器 SensitiveJsonSerializer 4 测试类 TestSe