SpringBoot 必備!Hutool DesensitizedUtil 助你輕松搞定敏感信息脫敏
在現代應用開發中,敏感數據的保護至關重要。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 項目引入這一強大工具吧!