MONI后台管理系统-敏感信息脱敏传输

本文章纯转载,如有侵权联系删除
SpringBoot如何优雅地实现返回数据脱敏
前言:数据脱敏是一种常见的数据安全保护技术,可以在保护数据隐私的同时,保持数据的有效性和可用性。在 Spring Boot 中,我们可以使用注解的方式实现数据脱敏,使代码更加简洁、易于维护和扩展。
目标: 实现在需要脱敏的字段上加上注解,返回前端时自动脱敏。

1. 创建Sensitize脱敏注解

package com.omni.admin.encryption.datamasking;import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@JacksonAnnotationsInside
@JsonSerialize(using = SensitiveJsonSerializer.class)
public @interface Sensitize {SensitizeRuleEnums rule();}

2. 配合使用SpringBoot 中jackson 作为 JSON 序列化工具,我们只要在数据返回前台的序列化过程中获取到我们自定义注解(Sensitize) ,对有该注解的字段实现脱敏操作。

package com.omni.admin.encryption.datamasking;import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;import java.io.IOException;
import java.util.Objects;public class SensitiveJsonSerializer extends JsonSerializer<String> implements ContextualSerializer {private SensitizeRuleEnums rule;@Overridepublic void serialize(String s, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {jsonGenerator.writeString(rule.sensitize().apply(s));}@Overridepublic JsonSerializer<?> createContextual(SerializerProvider serializerProvider, BeanProperty beanProperty) {Sensitize annotation = beanProperty.getAnnotation(Sensitize.class);if (Objects.nonNull(annotation) && Objects.equals(String.class, beanProperty.getType().getRawClass())) {this.rule = annotation.rule();return this;}return null;}
}

3. 脱敏实现类

package com.omni.admin.encryption.datamasking;import cn.hutool.core.util.DesensitizedUtil;import java.util.function.Function;public enum SensitizeRuleEnums {/*** 用户id脱敏*/USER_ID(s -> String.valueOf(DesensitizedUtil.userId())),/*** 中文姓名脱敏*/CHINESE_NAME(DesensitizedUtil::chineseName),/*** 身份证脱敏*/ID_CARD(s -> DesensitizedUtil.idCardNum(s, 3, 4)),/*** 固定电话*/FIXED_PHONE(DesensitizedUtil::fixedPhone),/*** 手机号脱敏*/MOBILE_PHONE(DesensitizedUtil::mobilePhone),/*** 地址脱敏*/ADDRESS(s -> DesensitizedUtil.address(s, 8)),/*** 电子邮箱脱敏*/EMAIL(DesensitizedUtil::email),/*** 密码脱敏*/PASSWORD(DesensitizedUtil::password),/*** 中国车牌脱敏*/CAR_LICENSE(DesensitizedUtil::carLicense),/*** 银行卡脱敏*/BANK_CARD(DesensitizedUtil::bankCard);/*** 可自行添加其他脱敏策略.....*/private final Function<String, String> sensitize;public Function<String, String> sensitize() {return sensitize;}SensitizeRuleEnums(Function<String, String> sensitize) {this.sensitize = sensitize;}
}

4. 使用该注解

只需要在需要脱敏的字段属性上 添加@Sensitize注解,并标识时哪一类即可。

    /*** 用户电话*/@Sensitize(rule = SensitizeRuleEnums.MOBILE_PHONE)@Schema(title = "用户电话")private String phone;

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

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

相关文章

分布式事务入门 一

分布式事务入门 一 您好&#xff0c;我是今夜写代码,今天学习下分布式事务相关理论&#xff0c;以及常见的解决方案&#xff0c;为后续掌握Seata分布式事务框奠定基础。 为什么需要分布式事务? 分布式事务主要由于存储资源的分布性&#xff0c;通常涉及多个数据库。 分布式…

Goland:专为Go语言设计的高效IDE

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;Goland是JetBrains公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为Go语言设计&#xff0c;提供了高效的代码编辑、强大的调试工具和丰富的项目管理功能。其智能代码补全、强大的调试与测试支…

uniapp 前端解决精度丢失的问题 (后端返回分布式id)

原因&#xff1a; 后端使用分布式id, id为19位数&#xff0c;导致精度丢失 &#xff0c;前端解决方法 这个是通过浏览器请求回来的数据&#xff0c;这个时候id 数据已经丢失了&#xff0c;在数据库查询不到&#xff0c;在调获详情接口的时候会有问题 实际的&#xff1a; 解决…

Pandas07

Pandas01 Pandas02 Pandas03 Pandas04 Pandas05 Pandas06 文章目录 1 用户偏好分析 TGI1.1 TGI介绍1.2 TGI案例代码 2 用户评论文本分析2.1 用户评论文本分析简介 1 用户偏好分析 TGI 1.1 TGI介绍 TGI&#xff08;Target Group Index&#xff0c;目标群体指数&#xff09;用于…

spring cloud微服务-OpenFeign的使用

OpenFeign的使用 openFeign的作用是服务间的远程调用 &#xff0c;比如通过OpenFeign可以实现调用远程服务。 已经有了LoadBalancer为什么还要用openFeign? 在微服务架构中&#xff0c;LoadBalancer和OpenFeign虽然都提供了服务间调用的能力&#xff0c;但它们的设计目的和…

使用PHP函数 “setcookie“ 设置cookie

在网站开发中&#xff0c;cookie是一种非常常用的技术&#xff0c;它用于在用户的浏览器中存储少量的数据&#xff0c;以便在不同页面之间传递信息。PHP提供了一个名为 "setcookie" 的函数&#xff0c;用于设置cookie的值和属性。在本文中&#xff0c;我们将学习如何…

读书笔记-《乡下人的悲歌》

前段时间看了一些 J.D. Vance 的采访视频&#xff0c;几乎都是记者带着刁难的问题先手进攻&#xff0c;而 Vance 面带微笑&#xff0c;提及对方的名字&#xff0c;条理清晰地从对方的攻击中切回主题形成后手反制&#xff0c;实在让人看得过瘾。 更不可思议的是&#xff0c;Van…

Datawhale-AI冬令营二期

目录 一、番茄时钟&#xff08;1&#xff09;输入Prompt&#xff08;2&#xff09;创建 HTML 文件解析1&#xff1a;HTML结构解析2&#xff1a;计时器内容解析3&#xff1a;按钮区域解析4&#xff1a;脚本引用 &#xff08;3&#xff09;使用JavaScript实现时钟功能解析1&#…

【Sentinel】流控效果与热点参数限流

目录 1.流控效果 1.1.warm up 2.2.排队等待 1.3.总结 2.热点参数限流 2.1.全局参数限流 2.2.热点参数限流 2.3.案例 1.流控效果 在流控的高级选项中&#xff0c;还有一个流控效果选项&#xff1a; 流控效果是指请求达到流控阈值时应该采取的措施&#xff0c;包括三种&…

我的Qt作品(20)使用Qt+OpenCV写一个旋转/抠图/mask生成工具

使用QtOpenCV写一个旋转/抠图/mask生成工具 1、旋转功能 void FormRotate::rotateImage(const cv::Mat &src, cv::Mat &dst, double degree) //旋转 {if (fabs(degree) < 0.001){dst src;return;}//center旋转的中心点坐标//degree旋转的角度,不是弧度,>0逆时针…

win11中win加方向键失效的原因

1、可能是你把win键锁了&#xff1a; 解决办法&#xff1a;先按Fn键&#xff0c;再按win键 2、可能是可能是 贴靠窗口设置 中将贴靠窗口关闭了&#xff0c;只需要将其打开就好了

MetaRename for Mac,适用于 Mac 的文件批量重命名工具

在处理大量文件时&#xff0c;为每个文件手动重命名既耗时又容易出错。对于摄影师、设计师、开发人员等需要频繁处理和整理文件的专业人士来说&#xff0c;找到一款能够简化这一过程的工具是至关重要的。MetaRename for Mac 就是这样一款旨在提高工作效率的应用程序&#xff0c…

JavaScript甘特图 dhtmlx-gantt

背景 需求是在后台中&#xff0c;需要用甘特图去展示管理任务相关视图&#xff0c;并且不用依赖vue&#xff0c;兼容JavaScript原生开发。最终使用dhtmlx-gantt&#xff0c;一个半开源的库&#xff0c;基础功能免费&#xff0c;更多功能付费。 甘特图需求如图&#xff1a; 调…

VSCode下载安装指南

VSCode下载 通过网盘分享的文件&#xff1a;VSCodeUserSetup-x64-1.96.2.exe 链接: https://pan.baidu.com/s/1l7fdxeALnyeuUe1a5l0aqQ?pwdb8y3 提取码: b8y3 –来自百度网盘超级会员v6的分享 VSCode安装 1、下载好之后双击下图 2、我同意&#xff0c;下一步 3、可以点浏…

多显卡服务器如何设置使用集成显卡输出信号?

要在IPMI中设置服务器的显示接口只使用集成显卡&#xff0c;而不使用插入的PCI显卡&#xff0c;您需要进入服务器的BIOS设置进行相应的配置。以下是一般步骤&#xff1a; • 重启服务器&#xff0c;在启动时按下相应的键&#xff08;通常是Del或F2&#xff09;进入BIOS设置。 …

【黑马头条】day20—xxl-job

目录 1 今日内容 1.1 需求分析 1.2 实现思路 1.3 定时计算 1.4 定时任务框架-xxljob 1.5 学习目录 2.分布式任务调度 2.1 什么是分布式任务调度 2.2 xxl-Job简介 2.3 XXL-Job-环境搭建 2.4 配置部署调度中心-docker安装 2.5 xxl-job入门案例编写 2.6 任务详解-执行…

人工智能基础软件-Jupyter Notebook

简介&#xff1a; Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算&#xff1a;开发、文档编写、运行代码和展示结果。 Jupyter Notebook是以网页的形式打开&#xff0c;可以在网页页面中直接编写代码和运行代码&#xff0c;代码的运行结果也会直…

Springboot配置嵌入式服务器

一.如何定制和修改Servlet容器的相关配置 修改和server有关的配置&#xff08;ServerProperties&#xff09;&#xff1b; server.port8081 server.context‐path/tx server.tomcat.uri‐encodingUTF‐8 在yml配置文件的写法&#xff1a; server:port: 8081servlet:context-pa…

Unity功能模块一对话系统(4)实现个性文本标签

本期我们将了解如何在TMPro中自定义我们的标签样式&#xff0c;并实现两种有趣的效果。 一.需求描述 1.定义<float>格式的标签&#xff0c;实现标签处延迟打印功能 2.定义<r" "></r>格式的标签&#xff0c;实现标签区间内文本片段的注释显示功能…

js正则表达式 校验邮箱,非法字符限制输入

Email地址的格式验证规则 JS代码格式&#xff1a; var pattern /\w[-\w.]*([A-Za-z0-9][-A-Za-z0-9]\.)[A-Za-z]{2,14}/; var str "xindd123456163.com"; console.log(pattern.test(str)); Java代码格式&#xff1a; import java.util.regex.Matcher; import…