用法


Jdk版本

大于等于1.8


maven依赖


<dependency>
<groupId>red.zyc</groupId>
<artifactId>desensitization</artifactId>
<version>2.4.6</version>
</dependency>

例子


对象域值脱敏


下面是一个Child类,其中包含了一些敏感域以及一些嵌套的敏感域


public class Child {

    @ChineseNameSensitive
private String name = "李富贵"; @IdCardNumberSensitive
private String idCardNumber = "321181199301096000"; @UsccSensitive
private String unifiedSocialCreditCode = "91310106575855456U"; @CharSequenceSensitive
private String string = "123456"; @EmailSensitive
private String email = "123456@qq.com"; @PasswordSensitive
private String password = "123456"; @CascadeSensitive
private Mother mother = new Mother(); @CascadeSensitive
private Father father = new Father(); private @PasswordSensitive
String[] passwords = {"123456", "1234567", "12345678"}; private List<@CascadeSensitive Parent> parents1 = Stream.of(new Father(), new Mother()).collect(Collectors.toList()); private List<@EmailSensitive String> emails1 = Stream.of("123456@qq.com", "1234567@qq.com", "1234568@qq.com").collect(Collectors.toList()); private Map<@ChineseNameSensitive String, @EmailSensitive String> emails2 = Stream.of("张三", "李四", "小明").collect(Collectors.toMap(s -> s, s -> "123456@qq.com")); }

只需要在敏感数据字段上标记相应类型的敏感注解,例如@ChineseNameSensitive@EmailSensitive等注解,如果你的数据字段是需要级联脱敏的对象,你只需要在该字段上标注@CascadeSensitive 注解,最后调用以下方法即可擦除对象中的所有敏感信息然后返回一个新的Child对象。


Child child=Sensitive.desensitize(new Child());

值脱敏


可能你的敏感信息是一个字符串类型的值或者是一个CollectionArrayMap之类的值,同样擦除它们的敏感信息也很简单

static void desensitize(){

        // String
System.out.printf("字符串脱敏: %s%n",Sensitive.desensitize("123456@qq.com",new TypeToken<@EmailSensitive String>(){
})); // Collection
System.out.printf("集合脱敏: %s%n",Sensitive.desensitize(Stream.of("123456@qq.com","1234567@qq.com","1234568@qq.com").collect(Collectors.toList()),
new TypeToken<List<@EmailSensitive String>>(){
})); // Array
System.out.printf("数组脱敏: %s%n",Arrays.toString(Sensitive.desensitize(new String[]{"123456@qq.com","1234567@qq.com","12345678@qq.com"},
new TypeToken<@EmailSensitive String[]>(){
}))); // Map
System.out.printf("Map脱敏: %s%n",Sensitive.desensitize(Stream.of("张三","李四","小明").collect(Collectors.toMap(s->s,s->"123456@qq.com")),
new TypeToken<Map<@ChineseNameSensitive String, @EmailSensitive String>>(){
}));
}

在上面的例子中通过TypeToken构造需要脱敏对象的类型以便我们能够准确的捕获被脱敏对象的实际类型和相应的敏感注解。 这里有一个很重要的地方需要我们格外的关注:由于jdk在解析注解时的bug导致无法正确的获取嵌套类上的注解,TypeToken必须在静态方法、静态代码块中初始化或者作为静态变量初始化,不能在实例方法、实例代码块中初始化同时也不能作为成员变量初始化,这样运行时才能正确的获取脱敏对象上的注解。

转载自:https://github.com/Allurx/desensitization

基于Java实现数据脱敏的更多相关文章

  1. 如何用java实现数据脱敏

    数据脱敏是什么意思呢? 数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并 ...

  2. 基于Mybatis插件方式实现数据脱敏处理

    一.项目介绍 1.项目背景 有时候我们数据库中存储一些敏感的信息比如手机号.银行卡号,我们希望我们查询出来的的时候对一些敏感信息做一些脱敏处理. 当面项目是基于自定义Mybatis插件方式实现数据脱敏 ...

  3. Jenkins日常运维笔记-重启数据覆盖问题、迁移、基于java代码发版(maven构建)

    之前在公司机房部署了一套jenkins环境,现需要迁移至IDC机房服务器上,迁移过程中记录了一些细节:1)jenkins默认的主目录放在当前用户家目录路径下的.jenkins目录中.如jenkins使 ...

  4. java 数据脱敏

    所谓数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份 ...

  5. Java导出数据行写入到Excel表格:基于Apache POI

    Java导出数据行写入到Excel表格:基于Apache POI import java.io.File; import java.io.FileOutputStream; import org.ap ...

  6. 基于java的网络爬虫框架(实现京东数据的爬取,并将插入数据库)

    原文地址http://blog.csdn.net/qy20115549/article/details/52203722 本文为原创博客,仅供技术学习使用.未经允许,禁止将其复制下来上传到百度文库等平 ...

  7. 自己写的基于java Annotation(注解)的数据校验框架

    JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方 ...

  8. Springboot 配置文件、隐私数据脱敏的最佳实践(原理+源码)

    大家好!我是小富- 这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号.密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小. 说起这 ...

  9. 利用Jackson序列化实现数据脱敏

    几天前使用了Jackson对数据的自定义序列化.突发灵感,利用此方法来简单实现接口返回数据脱敏,故写此文记录. 核心思想是利用Jackson的StdSerializer,@JsonSerialize, ...

  10. 数据脱敏 t-closeness介绍与实现

    数据脱敏 t-closeness介绍与实现 本文主要基于t-closeness的首次提出团队Ninghui Li, Tiancheng Li, Suresh Venkatasubramanian发表的 ...

随机推荐

  1. drf(3)

    1 不使用drf编写5个接口 1.1 路由 urlpatterns = [    path('books/', views.BookView.as_view()),    path('books/&l ...

  2. java 线程池 带返回值

    import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import ja ...

  3. 01 关于HTML基础-构建Web,这些你都知道吗?(很全)

    以下均是参考MDN web docs,总结出来的比较重要的知识点,与君共勉.不妥之处,还望大家及时提出! 什么是HTML? 是一种告诉浏览器如何组织页面的标记语言.它由一系列元素组成. HTML元素 ...

  4. Asp.Net Core 程序开发技巧汇总

    使用Sqlite数据库 创建项目 Asp.Net Core Web应用程序 Web应用程序 ASP.NET Core 2.2 NuGet管理,添加Sqlite数据库支持 Microsoft.Entit ...

  5. Promise和await、同步和异步

    1.同步和异步是什么: ​ ①同步:同步是指如果一个进程在执行某个请求的时候,如果该请求需要等待一段时间,那么该进程会一直等待下去,直到收到返回信息才继续执行下去 ​ ②异步: 指一个请求在执行某个请 ...

  6. java 程序运行机制

    java 程序运行同时拥有 编译型语言和解释型语言的特点 程序运行流程: 源程序 .java文件 --> Java 编译器--> 字节码 .class 文件 --> 类装饰器 --& ...

  7. python os模块总结-目录、文件操作工具

    os (operating system)是python标准库中的操作系统接口,提供了很多与操作系统进行交互的函数,可快速对目录.文件进行操作. 下面我将在C:\Users\Administrator ...

  8. StyleGAN 生成 AI 虚拟人脸,再也不怕侵犯肖像权

    目录 什么是 StyleGAN 如何使用 StyleGAN 下载项目 修改项目 MSVC 运行项目 运行结果 什么是 StyleGAN GAN 是机器学习中的生成性对抗网络,目标是合成与真实图像无法区 ...

  9. 改进 hibernate-validator,新一代校验框架 validator 使用介绍 v0.4

    项目介绍 java 开发中,参数校验是非常常见的需求.但是 hibernate-validator 在使用过程中,依然会存在一些问题. validator 在 hibernate-validator ...

  10. 安装原版Windows自动安装已经备份的驱动

    安装完Windows10后联网会自动更新驱动,除了自动更新.如果不让新安装的Windows系统自动安装驱动以外,还有自己手动安装驱动的方式.如何在安装系统过程中就让系统自己安装好驱动? 重装系统首先要 ...