前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个注解,实现数据的脱敏

一个注解,实现数据的脱敏

原创
作者头像
shigen
修改2023-09-12 07:49:31
2640
修改2023-09-12 07:49:31
举报

前言

现在是晚上的凌晨,😮‍💨哎,文章还没有写完,我要继续加班了。也在开始胡思乱想了,蚂蚁也开源了自己的代码模型,似乎程序员变得更加廉价了。

行业的前途在哪里,我的学长告诉我:丢掉无谓的焦虑,然后AI无法取代业务逻辑的书写,但是逻辑复杂了成本也会增加,看文档的成本也会增加。要是遇上稍微不规范的团队,直接如同迷雾中穿梭,在不懂逻辑的情况下被迫写代码,shi上堆shi。

好了,夜深了,我也不去哔哔,传输一点无用的emo了。


今天的话题是:一个注解实现业务数据脱敏。

背景

我们在开发的过程中,或者说再用一些类似某宝、某东的时候,发现个人信息的电话是这样的:123****7890,其实主要的目的还是为了实现数据的安全。那作为开发,我们自己怎样实现呢?我先拿一个简单的例子来说:

我们都会用到时间吧,前后端传输的时候,我们如果某个字段的类型是Date,那么前端接受的可能是这样的:

相信正常人谁看了谁都难受,恶心。

相信大家这样的代码也是在熟悉不过了,直接返回一个date类型的,前端还要再自己转一遍,真的太麻烦了。

那有没有办法可以直接后端返回格式化之后的数据呢?可以的,一个注解就可以满足。

这里主要就是加上了@JsonSerialize(using = DateSerialize.class)的注解。来看看怎么定义的吧。

其实就是结合hutool的工具类实现在json序列化的时候,改变一下string的格式。这样就一个注解实现了格式化的通用。OK,那能不能继续往下思考一下,实现一个通用的工具类,包括各种类型的数据脱敏呢?安排上!

实现

首先,我查了一下hutool DesensitizedUtil对应的方法:

涉及的范围还是挺广的,那就定义成一个枚举类型的吧。

那接下来一样的思路,我们需要定义一个Desensitization 的自定义注解,它有三个参数:参数的类型(电话、邮箱、密码……)、脱敏的起始位置、脱敏的结束位置。

这里为了不出现异常,默认的类型就是我们自定义的类型CUSTOMER

接下来的关键点就是DesensitizationSerialize的设计了,因为在注解序列化的时候用到了。

这个的代码有点多,建议横屏观看。

其实关键在于下方的createContextual ,获得bean的属性,然后获得注解的属性,初始化DesensitizationSerialize进行数据的脱敏回写,设计的还是很巧妙的。

那使用上就更简单了,shigen直接上代码了。

请求接口,看到的数据就是这样的:

这就巧妙的实现了数据的脱敏,也感谢hutool工具类的支持和大神蜗牛提供的解决方案。

代码也在shigen的gitee上:数据脱敏,需要源代码的伙伴可以去看看。


以上就是《一个注解,实现数据脱敏》的全部内容了。

与**shigen**一起,每天不一样!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 背景
  • 实现
相关产品与服务
数据脱敏
数据脱敏(Data Masking,DMask)是一款敏感数据脱敏与水印标记工具,可对数据系统中的敏感信息进行脱敏处理并在泄漏时提供追溯依据,为企业数据共享、迁移、分发提供安全保护措施。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档