
如何对数据进行脱敏处理?
一、背景
实际的业务开发过程中,我们经常需要对用户的隐私数据进行脱敏处理,所谓脱敏处理其实就是将数据进行混淆隐藏,例如下图,将用户的手机号、地址等数据信息,采用*进行隐藏,以免泄露个人隐私信息。
如果需要脱敏的数据范围很小很小,甚至就是指定的字段,一般的处理方式也很简单,就是写一个隐藏方法即可实现数据脱敏。
如果是需求很少的情况下,采用这种方式实现没太大问题,好维护!
但如果是类似上面那种很多位置的数据,需要分门别类的进行脱敏处理,通过这种简单粗暴的处理,代码似乎就显得不太优雅了。
思考一下,我们可不可以在数据输出的阶段,进行统一数据脱敏处理,这样就可以省下不少体力活。
说到数据输出,很多同学可能会想到 JSON 序列化。是的没错,我们所熟悉的 web 系统,就是将数据通过 json 序列化之后展示给前端。
那么问题来了,如何在序列化的时候,进行数据脱敏处理呢?
废话不多说,代码直接撸上!
二、程序实践
2.1、首先添加依赖包
默认的情况下,如果当前项目已经添加了spring-web包或者spring-boot-starter-web包,因为这些jar包已经集成了jackson相关包,因此无需重复依赖。
如果当前项目没有jackson包,可以通过如下方式进行添加相关依赖包。
2.2、编写脱敏类型枚举类,满足不同场景的处理
2.3、编写脱敏注解类
2.4、编写脱敏序列化类
其中createContextual的作用是通过字段已知的上下文信息定制JsonSerializer对象。
2.4、编写脱敏工具类
2.5、编写测试实体类
最后,我们编写一个实体类UserEntity,看看转换后的效果如何?
测试程序如下:
结果如下:
很清晰的看到,转换结果成功!
如果你当前的项目是基于SpringMVC框架进行开发的,那么在对象返回的时候,框架会自动帮你采用jackson框架进行序列化。
请求网页http://127.0.0.1:8080/hello,结果如下:
三、小结
在实际的业务场景开发中,采用注解方式进行全局数据脱敏处理,可以有效的解决敏感数据隐私泄露的问题。
本文主要从实操层面对数据脱敏处理做了简单的介绍,可能有些网友还有更好的解决方案,欢迎下方留言,后面如果遇到了好的解决办法,也会分享给大家,愿对大家有所帮助!
四、参考
1、CSDN - 注解实现json序列化的时候自动进行数据脱敏
2、yanbin.blog - 自定义 Jackson 注解与禁用某一特定的注解
3、简书 - 数据脱敏处理
本文转载自公共号Java极客技术。
