数据脱敏的 3 种常见方案,好用到爆!

news2024/10/7 4:25:26

1.SQL数据脱敏实现

MYSQL(电话号码,身份证)数据脱敏的实现

-- CONCAT()、LEFT()和RIGHT()字符串函数组合使用,请看下面具体实现

-- CONCAT(str1,str2,…):返回结果为连接参数产生的字符串
-- LEFT(str,len):返回从字符串str 开始的len 最左字符
-- RIGHT(str,len):从字符串str 开始,返回最右len 字符

-- 电话号码脱敏sql:

SELECT mobilePhone AS 脱敏前电话号码,CONCAT(LEFT(mobilePhone,3), '********' ) AS 脱敏后电话号码 FROM t_s_user

-- 身份证号码脱敏sql:

SELECT idcard AS 未脱敏身份证, CONCAT(LEFT(idcard,3), '****' ,RIGHT(idcard,4)) AS 脱敏后身份证号 FROM t_s_user

2.JAVA数据脱敏实现

可参考:海强 / sensitive-plus

https://gitee.com/strong_sea/sensitive-plus

数据脱敏插件,目前支持地址脱敏、银行卡号脱敏、中文姓名脱敏、固话脱敏、身份证号脱敏、手机号脱敏、密码脱敏 一个是正则脱敏、另外一个根据显示长度脱敏,默认是正则脱敏,可以根据自己的需要配置自己的规则。

3.mybatis-mate-sensitive-jackson

mybatisplus 的新作,可以测试使用,生产需要收费。

根据定义的策略类型,对数据进行脱敏,当然策略可以自定义。

# 目前已有
package mybatis.mate.strategy;

public interface SensitiveType {
    String chineseName = "chineseName";
    String idCard = "idCard";
    String phone = "phone";
    String mobile = "mobile";
    String address = "address";
    String email = "email";
    String bankCard = "bankCard";
    String password = "password";
    String carNumber = "carNumber";
}

Demo 代码目录

图片

1、pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-mate-examples</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>mybatis-mate-sensitive-jackson</artifactId>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

</project>

2、appliation.yml

# DataSource Config spring:   datasource: #    driver-class-name: org.h2.Driver #    schema: classpath:db/schema-h2.sql #    data: classpath:db/data-h2.sql #    url: jdbc:h2:mem:test #    username: root #    password: test     driver-class-name: com.mysql.cj.jdbc.Driver     url: jdbc:mysql://localhost:3306/mybatis_mate?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC     username: root     password: 123456 # Mybatis Mate 配置 mybatis-mate:   cert:     # 请添加微信wx153666购买授权,不白嫖从我做起! 测试证书会失效,请勿正式环境使用     grant: thisIsTestLicense     license: as/bsBaSVrsA9FfjC/N77ruEt2/QZDrW+MHETNuEuZBra5mlaXZU+DE1ZvF8UjzlLCpH3TFVH3WPV+Ya7Ugiz1Rx4wSh/FK6Ug9lhos7rnsNaRB/+mR30aXqtlLt4dAmLAOCT56r9mikW+t1DDJY8TVhERWMjEipbqGO9oe1fqYCegCEX8tVCpToKr5J1g1V86mNsNnEGXujnLlEw9jBTrGxAyQroD7Ns1Dhwz1K4Y188mvmRQp9t7OYrpgsC7N9CXq1s1c2GtvfItHArkqHE4oDrhaPjpbMjFWLI5/XqZDtW3D+AVcH7pTcYZn6vzFfDZEmfDFV5fQlT3Rc+GENEg== # Logger Config logging:   level:     mybatis.mate: debug 

3、Appliation启动类

package mybatis.mate.sensitive.jackson; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SensitiveJacksonApplication {     // 测试访问 http://localhost:8080/info ,http://localhost:8080/list     public static void main(String[] args) {         SpringApplication.run(SensitiveJacksonApplication.class, args);     } } 

4、配置类,自定义脱敏策略

package mybatis.mate.sensitive.jackson.config; import mybatis.mate.databind.ISensitiveStrategy; import mybatis.mate.strategy.SensitiveStrategy; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SensitiveStrategyConfig {     /**      * 注入脱敏策略      */     @Bean     public ISensitiveStrategy sensitiveStrategy() {         // 自定义 testStrategy 类型脱敏处理         return new SensitiveStrategy().addStrategy("testStrategy", t -> t + "***test***");     } } 

5、业务类

User,注解标识脱敏字段,及选用脱敏策略

package mybatis.mate.sensitive.jackson.entity; import lombok.Getter; import lombok.Setter; import mybatis.mate.annotation.FieldSensitive; import mybatis.mate.sensitive.jackson.config.SensitiveStrategyConfig; import mybatis.mate.strategy.SensitiveType; @Getter @Setter public class User {     private Long id;     /**      * 这里是一个自定义的策略 {@link SensitiveStrategyConfig} 初始化注入      */     @FieldSensitive("testStrategy")     private String username;     /**      * 默认支持策略 {@link SensitiveType }      */     @FieldSensitive(SensitiveType.mobile)     private String mobile;     @FieldSensitive(SensitiveType.email)     private String email; } 

UserController

package mybatis.mate.sensitive.jackson.controller; import mybatis.mate.databind.ISensitiveStrategy; import mybatis.mate.databind.RequestDataTransfer; import mybatis.mate.sensitive.jackson.entity.User; import mybatis.mate.sensitive.jackson.mapper.UserMapper; import mybatis.mate.strategy.SensitiveType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController public class UserController {     @Autowired     private UserMapper userMapper;     @Autowired     private ISensitiveStrategy sensitiveStrategy;     // 测试访问 http://localhost:8080/info     @GetMapping("/info")     public User info() {         return userMapper.selectById(1L);     }     // 测试返回 map 访问 http://localhost:8080/map     @GetMapping("/map")     public Map<String, Object> map() {         // 测试嵌套对象脱敏         Map<String, Object> userMap = new HashMap<>();         userMap.put("user", userMapper.selectById(1L));         userMap.put("test", 123);         userMap.put("userMap", new HashMap<String, Object>() {{             put("user2", userMapper.selectById(2L));             put("test2", "hi china");         }});         // 手动调用策略脱敏         userMap.put("mobile", sensitiveStrategy.getStrategyFunctionMap()                 .get(SensitiveType.mobile).apply("15315388888"));         return userMap;     }     // 测试访问 http://localhost:8080/list     // 不脱敏 http://localhost:8080/list?skip=1     @GetMapping("/list")     public List<User> list(HttpServletRequest request) {         if ("1".equals(request.getParameter("skip"))) {             // 跳过脱密处理             RequestDataTransfer.skipSensitive();         }         return userMapper.selectList(null);     } } 

UserMapper

package mybatis.mate.sensitive.jackson.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import mybatis.mate.sensitive.jackson.entity.User; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserMapper extends BaseMapper<User> { } 

6、测试

GET http://localhost:8080/list

[   {     "id": 1,     "username": "Jone***test***",     "mobile": "153******81",     "email": "t****@baomidou.com"   },   {     "id": 2,     "username": "Jack***test***",     "mobile": "153******82",     "email": "t****@baomidou.com"   },   {     "id": 3,     "username": "Tom***test***",     "mobile": "153******83",     "email": "t****@baomidou.com"   } ] 

GET http://localhost:8080/list?skip=1

[
  {
    "id": 1,
    "username": "Jone",
    "mobile": "15315388881",
    "email": "test1@baomidou.com"
  },
  {
    "id": 2,
    "username": "Jack",
    "mobile": "15315388882",
    "email": "test2@baomidou.com"
  },
  {
    "id": 3,
    "username": "Tom",
    "mobile": "15315388883",
    "email": "test3@baomidou.com"
  }
]

 

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

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

相关文章

力扣 -- 123. 买卖股票的最佳时机 III

题目链接&#xff1a;123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; 下面是用动态规划的思想解决这道题的过程&#xff0c;相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 参考代码&#xff1a; class Solution { public:int maxProfit(vect…

OKCC呼叫中心的坐席监控功能有什么

最近很多客户都在跟我谈他们企业的电话客服工作量都非常大&#xff0c;虽然客服人员在服务时应该态度谦和&#xff0c;但是遇到难缠的客户&#xff0c;客服人员总有脾气忍不住的时候&#xff0c;言语上会带有情绪&#xff0c;这些客服人员会因为服务水平欠佳让客户不满意从而产…

【Python】json 格式转换 ( json 模块使用 | 列表转 json | json 转列表 | 字典转 json | json 转字典 )

文章目录 一、json 格式转换1、json 模块使用2、代码示例分析 - 列表转 json3、代码示例分析 - 字典转 json json 格式 字符串 与 Python 中的 字典 dict 和 列表 list 变量 可以无缝转换 ; 调用 json.dumps 函数 可以将 Python 列表 / 字典 转为 json ;调用 json.loads 函数 …

基于Vue + 数据组装 + axios请求接口 实现图书信息提交功能实战

前言 上节回顾 上一节针对图书信息录入前的准备做了讲解&#xff0c;主要是使用ElementUI的el-form做录入界面基本布局&#xff0c;包含了el-input el-select el-date-picker 还有图片上传等组件。同时在布局完成后&#xff0c;配合使用el-form自带的rules进行数据提交前验证…

生鲜小程序怎么做

生鲜超市小程序功能介绍 1、产品展示&#xff1a;果蔬生鲜的图片展示&#xff0c;食欲满满的食材图&#xff0c;丰富的生鲜品类&#xff0c;细致的产品描述&#xff0c;提高用户的购买欲望和复购率。 2、在线支付&#xff1a;用户选择好所需食材在线下单&#xff0c;利用第三…

[Linux] 守护进程介绍、服务器的部署、日志文件...

守护进程 我们使用的系统中, 一般以服务器的方式工作 对外提供服务的服务器, 都是以守护进程的方式在系统中工作的. 比如, 我们使用Linux服务器时, 大多都会使用一些终端软件通过ssh远程连接服务器使用. 这就是因为, Linux服务器中 通常默认运行着 ssh服务器的守护进程: 守护…

利用数据分析告警机制,实现鸿鹄与飞书双向集成

需求描述 实现鸿鹄与飞书的双向集成&#xff0c;依赖鸿鹄的告警机制&#xff0c;可以发送用户关心的信息到飞书。同时依赖飞书强大的卡片消息功能&#xff0c;在飞书消息里面能够通过链接&#xff08;如下图&#xff09;返回到鸿鹄以方便用户进一步排查和分析问题。 解决方案 1…

Goby 漏洞发布|致远 M1 移动端 userTokenService 代码执行漏洞

漏洞名称&#xff1a;致远 M1 移动端 userTokenService 代码执行漏洞 English Name&#xff1a;seeyon M1 Server userTokenService Code Execution Vulnerability CVSS core: 10.0 影响资产数&#xff1a;7050 漏洞描述&#xff1a; 致远 M1 Server是一个移动服务。致远 …

7zip修复右击菜单的问题

以管理员权限运行7-Zip File Manager后 &#xff0c;要在右键菜单显示 图标&#xff0c;不然就有问题

苍穹外卖day03——菜品管理业务代码开发

目录 公共字段自动填充——问题分析和实现思路 公共字段自动填充——代码实现(1) 公共字段自动填充——代码实现完善(2) 新增菜品——需求分析与设计 产品原型 ​编辑 接口设计 ​编辑 数据库设计 新增菜品——代码开发1(文件上传接口) 配置文件 Controller层代码 前后…

项目名称:智能家居边缘网关项目

一&#xff0c;项目介绍 软件环境: C语言 硬件环境: STM32G030C8TX单片机开发板 开发工具: Linux平台GCC交叉编译环境以及ukeil (1)边缘网关概念 边缘网关是部署在网络边缘侧的网关&#xff0c;通过网络联接、协议转换等功能联接物理和数字世界&#xff0c;提供轻量化的联接管…

大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解

大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解 1.GPT 模型 1.1 GPT 模型简介 在自然语言处理问题中&#xff0c;可从互联网上下载大量无标注数据&#xff0c;而针对具体问题的有标注数据却非常少&#x…

原型设计用什么比较好?这4款值得体验

无论是UI还是UX设计师&#xff0c;工作中肯定少不了交互设计。在设计原型图时&#xff0c;一款好用的原型设计工具肯定是必不可少&#xff0c;本文就整理了4款为大家推荐&#xff0c;一起来看看吧 即时设计 即时设计是一款更适合国内UI或UX设计师和产品经理使用的原型设计工具…

如何使用Python三方库CCXT

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

<数据结构>NO11.归并排序|递归|非递归|优化

文章目录 归并排序递归写法非递归写法修正方案1.归并一段拷贝一段修正方案2.修正区间 算法优化算法分析 归并排序的应用外排序和内排序 归并排序 递归写法 思路: 如果给出两个有序数组&#xff0c;我们很容易可以将它们合并为一个有序数组。因此当给出一个无序数组时&#xf…

如何解决循环引用的问题

本文已收录于专栏 《Java》 目录 概念说明发现问题解决问题分析问题具体解决注解说明代码实现效果展示 总结提升 概念说明 循环引用是指在对象之间存在相互引用的情况。具体来说&#xff0c;当一个对象A引用了另一个对象B&#xff0c;而对象B又引用了对象A&#xff0c;它们之间…

软件研发开发人员成本计算器

写了个简单的人员工资计算器&#xff0c;用最简单的人天数计算研发投入&#xff0c;其他费用计算稍后补充完善 软件研发成本计算 ——高级工程师中级工程师初级工程师平均日工资项目阶段高级工程师人天中级工程师人天初级工程师人天调研方案产品设计软件开发测试部署培训试运…

操作系统(王道)- 初识操作系统

一、什么是操作系统&#xff1f; 操作系统可以这么理解 操作系统的定义&#xff1a; 操作系统是整个计算机的硬件和软件的管理者&#xff01;&#xff01;&#xff01; 二、操作系统的功能和目标 作为计算机硬件和软件的管理者&#xff0c;操作系统做了什么&#xff1f; 操作系…

安达发|工业系统APS软件与MES软件有哪些区别?

MES 和 APS 有什么区别&#xff1f;MES 是一个制造执行系统&#xff0c;APS 是一个高级计划排程系统系统&#xff0c;两者是互补的关系&#xff0c;APS 和 MES 可以实现计划和车间执行的闭环管理模式。MES 和 APS 有什么区别&#xff1f; mes和aps的区别: MES 是智能化工厂…

【1++的Linux】之进程(一)

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的Linux】 文章目录 一&#xff0c;冯诺依曼与操作系统概念1.1 冯诺依曼体系结构1.2 操作系统 二&#xff0c;进程的基本概念 一&#xff0c;冯诺依曼与操作系统概念 1.1 冯诺依曼体系结构 如…