在现代应用开发中,敏感数据的保护至关重要。Hutool 作为一个强大的 Java 工具库,提供了许多实用的功能,其中 DesensitizedUtil 是专门用于敏感信息脱敏的工具类。本文将介绍 DesensitizedUtil 的核心功能、使用方法,并探讨其在实际应用中的场景。
DesensitizedUtil 功能介绍
DesensitizedUtil 是 Hutool 库中的一个数据脱敏工具类,旨在帮助开发者轻松处理各种敏感信息。它支持对以下多种数据类型进行脱敏:
- 用户 ID
- 中文姓名
- 身份证号
- 座机号、手机号
- 地址信息
- 电子邮件
- 密码
- 中国车牌(包括普通和新能源车牌)
- 银行卡号
多种脱敏策略
DesensitizedUtil 提供了多种灵活的脱敏策略。例如:
- 身份证号隐藏前两位和后四位,仅保留中间部分。
- 手机号隐藏前三位和后四位,仅保留中间部分。
- 密码所有字符替换为 * 号。
- 中文姓名隐藏姓氏以外的字符。
如何使用 DesensitizedUtil
在 Spring Boot 3.4 项目中,我们可以直接使用 Hutool 提供的 DesensitizedUtil 来进行脱敏处理。
首先,添加 Hutool 依赖到 pom.xml:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.20</version>
</dependency>
身份证号脱敏
import cn.hutool.core.util.DesensitizedUtil;
public class DesensitizationExample {
public static void main(String[] args) {
String idCardNum = DesensitizedUtil.idCardNum("51343620000320711X", 1, 2);
System.out.println(idCardNum); // 输出:513436**********11X
}
}
效果:前两位和后四位可见,中间部分被 * 号隐藏。
手机号脱敏
String mobilePhone = DesensitizedUtil.mobilePhone("18049539199");
System.out.println(mobilePhone); // 输出:180****9399
效果:前三位和后四位可见,中间部分隐藏。
密码脱敏
String password = DesensitizedUtil.password("1234567890");
System.out.println(password); // 输出:**********
效果:所有字符都被 * 号替换。
中文姓名脱敏
String chineseName = DesensitizedUtil.chineseName("张三");
System.out.println(chineseName); // 输出:张**
效果:仅保留姓氏,其他字符隐藏。
实际应用场景
在实际开发中,DesensitizedUtil 在数据保护和隐私安全方面发挥了重要作用,尤其适用于以下场景:
- 日志记录:避免日志中暴露敏感信息,如身份证号、手机号等。
- 数据展示:用户界面或报表中脱敏展示,防止敏感数据泄露。
- 数据传输:在 API 返回的数据中对敏感字段进行脱敏,减少数据安全风险。
在 Spring Boot 3.4 中使用自定义脱敏注解
为了让 DesensitizedUtil 更加便捷地与 Spring Boot 结合,可以使用 Jackson 注解自定义序列化器,实现数据自动脱敏。
创建自定义脱敏注解
package com.icoderoad.annotation;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface DesensitizedField {
String type() default "default";
}
创建 Jackson 脱敏序列化器
package com.icoderoad.config;
import cn.hutool.core.util.DesensitizedUtil;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
public class DesensitizedSerializer extends JsonSerializer<String> {
@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(DesensitizedUtil.mobilePhone(value));
}
}
在实体类中使用
package com.icoderoad.entity;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.icoderoad.config.DesensitizedSerializer;
public class User {
private String name;
@JsonSerialize(using = DesensitizedSerializer.class)
private String phone;
}
这样,在 Spring Boot 3.4 运行时,返回的 phone 字段会自动脱敏,无需手动调用 DesensitizedUtil。
结论
DesensitizedUtil 作为 Hutool 工具库中的重要组成部分,为 Spring Boot 3.4 开发者提供了一种高效、灵活的敏感信息脱敏方案。通过结合 Jackson 进行自动序列化处理,可以进一步提升开发效率并增强数据安全性。
无论是日志保护、数据展示,还是 API 数据返回,合理使用 DesensitizedUtil 都可以显著减少敏感信息泄露的风险。快来为你的 Spring Boot 项目引入这一强大工具吧!