SpringBoot 必備!Hutool DesensitizedUtil 助你輕松搞定敏感信息脫敏
在現(xiàn)代應(yīng)用開發(fā)中,敏感數(shù)據(jù)的保護(hù)至關(guān)重要。Hutool 作為一個強(qiáng)大的 Java 工具庫,提供了許多實用的功能,其中 DesensitizedUtil 是專門用于敏感信息脫敏的工具類。本文將介紹 DesensitizedUtil 的核心功能、使用方法,并探討其在實際應(yīng)用中的場景。
DesensitizedUtil 功能介紹
DesensitizedUtil 是 Hutool 庫中的一個數(shù)據(jù)脫敏工具類,旨在幫助開發(fā)者輕松處理各種敏感信息。它支持對以下多種數(shù)據(jù)類型進(jìn)行脫敏:
- 用戶 ID
- 中文姓名
- 身份證號
- 座機(jī)號、手機(jī)號
- 地址信息
- 電子郵件
- 密碼
- 中國車牌(包括普通和新能源車牌)
- 銀行卡號
多種脫敏策略
DesensitizedUtil 提供了多種靈活的脫敏策略。例如:
- 身份證號隱藏前兩位和后四位,僅保留中間部分。
- 手機(jī)號隱藏前三位和后四位,僅保留中間部分。
- 密碼所有字符替換為 * 號。
- 中文姓名隱藏姓氏以外的字符。
如何使用 DesensitizedUtil
在 Spring Boot 3.4 項目中,我們可以直接使用 Hutool 提供的 DesensitizedUtil 來進(jìn)行脫敏處理。
首先,添加 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
}
}
效果:前兩位和后四位可見,中間部分被 * 號隱藏。
手機(jī)號脫敏
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); // 輸出:張**
效果:僅保留姓氏,其他字符隱藏。
實際應(yīng)用場景
在實際開發(fā)中,DesensitizedUtil 在數(shù)據(jù)保護(hù)和隱私安全方面發(fā)揮了重要作用,尤其適用于以下場景:
- 日志記錄:避免日志中暴露敏感信息,如身份證號、手機(jī)號等。
- 數(shù)據(jù)展示:用戶界面或報表中脫敏展示,防止敏感數(shù)據(jù)泄露。
- 數(shù)據(jù)傳輸:在 API 返回的數(shù)據(jù)中對敏感字段進(jìn)行脫敏,減少數(shù)據(jù)安全風(fēng)險。
在 Spring Boot 3.4 中使用自定義脫敏注解
為了讓 DesensitizedUtil 更加便捷地與 Spring Boot 結(jié)合,可以使用 Jackson 注解自定義序列化器,實現(xiàn)數(shù)據(jù)自動脫敏。
創(chuàng)建自定義脫敏注解
package com.icoderoad.annotation;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface DesensitizedField {
String type() default "default";
}
創(chuàng)建 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 運(yùn)行時,返回的 phone 字段會自動脫敏,無需手動調(diào)用 DesensitizedUtil。
結(jié)論
DesensitizedUtil 作為 Hutool 工具庫中的重要組成部分,為 Spring Boot 3.4 開發(fā)者提供了一種高效、靈活的敏感信息脫敏方案。通過結(jié)合 Jackson 進(jìn)行自動序列化處理,可以進(jìn)一步提升開發(fā)效率并增強(qiáng)數(shù)據(jù)安全性。
無論是日志保護(hù)、數(shù)據(jù)展示,還是 API 數(shù)據(jù)返回,合理使用 DesensitizedUtil 都可以顯著減少敏感信息泄露的風(fēng)險??靵頌槟愕?nbsp;Spring Boot 項目引入這一強(qiáng)大工具吧!