Hutool实现数据脱敏

文章介绍了数据脱敏的概念和目的,通过Hutool工具类展示了如何对手机号进行脱敏。接着,利用Jackson的注解功能和自定义序列化类`TestJacksonSerialize`,实现对手机号的序列化脱敏。最后,文章提出了一种通过自定义注解`@Desensitization`结合Hutool和Jackson实现更灵活的数据脱敏方法,并给出了示例代码,包括注解定义、枚举类、自定义序列化类以及测试用例。

什么是数据脱敏

数据脱敏是一种通过去除或替换敏感数据中的部分信息,以保护数据隐私和安全的技术。其主要目的是确保数据仍然可以在各种场景中使用,同时保护敏感信息,防止数据泄露和滥用。数据脱敏通常用于处理包含个人身份信息和其他敏感信息的数据集,如手机号、姓名、地址、银行卡、身份证号、车牌号等等。

在数据脱敏过程中,通常会采用不同的算法和技术,以根据不同的需求和场景对数据进行处理。例如,对于身份证号码,可以使用掩码算法(masking)将前几位数字保留,其他位用“X”或"*"代替;对于姓名,可以使用伪造(pseudonymization)算法,将真实姓名替换成随机生成的假名。

1、使用 Hutool 工具类实现数据掩码

比喻说我们现在要对手机号进行数据脱敏,前三后四不掩码,其他全部用 * 进行掩码

如下图代码所示,我们定义了一个手机号:17677772345,需要进行数据脱敏。调用的 Hutool 的信息脱敏工具类。

 

运行一下看看结果。一个简单的数据脱敏就实现了。

 

Hutool 信息脱敏工具类

根据上面的一个 Demo,大家可以看到我使用了 Hutool 的信息脱敏工具类进行对手机号掩码脱敏。那么让我们一起看看 Hutool 信息脱敏的工具类吧。

官网文档:https://hutool.cn/docs/#/core/工具类/信息脱敏工具-DesensitizedUtil

看一下官网的介绍,支持多种脱敏数据类型,满足我们大部分需求,如果需要自定义还提供了自定义的方法实现。

 

下面是里面定义号的脱敏规则,直接调用就可以实现简单的数据脱敏,这里给大家介绍是因为我们今天要给大家带来的注解实现数据脱敏核心就是利用我们的 Hutool 提供的工具类实现,支持自定义隐藏。

 

使用 Jackson 进行数据序列化脱敏

首先创建一个实体类,此实体类只有一个测试的手机号。

注解的讲解:

  • @Data:lombok 的注解生成 get,set 等等方法。

  • @JsonSerialize(using = TestJacksonSerialize.class):该注解的作用就是可自定义序列化,可以用在注解上,方法上,字段上,类上,运行时生效等等,根据提供的序列化类里面的重写方法实现自定义序列化。可以看下下面的源码,有兴趣的朋友可以去了解一下,也能解决我们日常开发中很多场景。 

 

@Data
public class TestDTO implements Serializable {
    /**
     * 手机号
     */
    @JsonSerialize(using = TestJacksonSerialize.class)
    private String phone;
}

然后创建一个 TestJacksonSerialize 类实现自定义序列化。

此类主要继承 JsonSerializer,因为我们这里需要序列化的类型是 String 泛型就选择 String。注意如果你使用此注解作用在类上的话,这里就是你要序列化的类。

重写序列化方法,里面的实现很简单就是调用我们的 Hutool 工具类进行手机号数据脱敏。

public class TestJacksonSerialize extends JsonSerializer<String> {

    @Override
    @SneakyThrows
    public void serialize(String str, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) {
        // 使用我们的hutool工具类进行手机号脱敏
        jsonGenerator.writeString(DesensitizedUtil.fixedPhone(String.valueOf(str)));
    }
}

让我们

### Hutool 数据脱敏使用方法 #### 使用注解方式实现数据脱敏 为了简化开发过程并提高代码可读性,可以采用 `@Desensitize` 注解配合 Jackson 序列化器来进行自动化的字段级数据脱敏处理[^1]。 ```java import cn.hutool.core.util.DesensitizedUtil; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; public class User { @JsonSerialize(using = ToStringSerializer.class) @Desensitize(strategy = Desensitize.Strategy.CHINESE_NAME) private String name; public static void main(String[] args){ System.out.println(new User().getName()); } } ``` 上述例子展示了如何通过简单的注解配置即可轻松完成对中国姓名类型的字符串进行默认模式下的脱敏操作。对于其他类型的数据,则可以通过调整 `strategy` 参数指定不同的策略来满足具体需求[^3]。 #### 手动调用工具类函数 除了借助于框架特性外,还可以直接运用 Hutool 中提供的静态方法对特定格式的信息实施保护措施: - **手机号码** ```java String phoneNo = "1890755****"; System.out.println(DesensitizedUtil.phone(phoneNo)); // 输出:189****5678 ``` - **电子邮箱地址** ```java String emailAddr = "example@example.com"; System.out.println(DesensitizedUtil.email(emailAddr)); // 输出:e*****e@e***m.c** ``` - **身份证号** ```java String idCardNumber = "51343620000320711X"; System.out.println(DesensitizedUtil.idCardNum(idCardNumber, 1, 2)); // 输出:5***************1X ``` 这些实用的方法能够帮助开发者快速有效地隐藏掉不必要的个人信息部分,从而保障用户的隐私安全[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值