工作常備:自定義註解實現資料脫敏

努力的小雨發表於2024-11-15

今天,我們將深入探討如何自定義註解來實現對敏感資料的脫敏處理。在當今資料安全越來越受到重視的背景下,許多企業都對敏感資料的保護有著嚴格的要求,尤其是在處理涉及個人隱私、財務資訊等敏感資料時,脫敏成為了一個至關重要的環節。因此,今天的內容將著重於實踐操作,而不會涉及過多的理論解析。

我們將透過一個具體的示例,逐步展示如何透過自定義註解來對資料進行脫敏處理,整個過程僅依賴Spring框架,無需引入任何第三方庫或額外的依賴。只需要跟隨步驟操作,即可完成相應的功能實現。接下來,讓我們開始這一實戰篇的學習吧。

資料脫敏

我們需要處理的脫敏資料種類繁多,包括但不限於身份證號碼、電話號碼、使用者名稱、微訊號等。每種資料型別都有其特定的加密或脫敏規則,因此必須對每種資料型別進行單獨處理。

自定義註解

接下來,我們將需要使用自定義註解來實現特定的功能和行為。這些註解將根據其定義的用途,分別作用於各個類的屬性上,以便在不同的上下文中提供所需的標識、驗證或處理邏輯。好的,我們編寫一下:

public class DesensitizeJsonSerializerByTelNo extends JsonSerializer<String> {
    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        // 在序列化時進行資料脫敏
        gen.writeString(value.replaceAll("(?<=^..).(?=.*..$)", "*"));
    }
}


public class DesensitizeJsonSerializerByCustNm extends JsonSerializer<String> {

    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        // 在序列化時進行資料脫敏
        gen.writeString(value.replaceAll("(?<=^.).*", "*"));
    }
}


public class DesensitizeJsonSerializerByEmail extends JsonSerializer<String> {
    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        // 在序列化時進行資料脫敏
        gen.writeString(value.replaceAll("(?<=^.|(?<=@.).)([^@])(.*)(?=@|$)", "*$3"));
    }
}

在這裡,我們不打算列舉所有可能的註解,而是選擇列舉三個最常用、最具代表性的註解型別。這些註解覆蓋了我們在實際開發中最常見的需求。接下來,我們就開始在具體的類和屬性上新增這些註解。

用法

我們通常會使用實體類來作為返回資料型別傳遞給Spring框架,Spring會自動將這些實體類進行序列化,以便在客戶端和伺服器之間進行資料交換。接下來,我們就開始具體實現這一過程。

@JsonSerialize(using = DesensitizeJsonSerializerByCustNm.class)
private  String       custNm;
@JsonSerialize(using = DesensitizeJsonSerializerByIdentityCard.class)
private  String       ssnCrnNo;

在這裡,我們僅演示基本的脫敏用法。這種方式基本上能夠確保在返回給前端時,資料會經過註解標記的序列化脫敏處理,從而避免敏感資訊洩露。然而,如果我們需要在內部處理過程中也對資料進行脫敏,該怎麼辦呢?因為預設情況下,脫敏操作僅會在資料返回給前端時透過註解觸發,而在內部邏輯中,資料並不會自動脫敏。

在這種情況下,我們可以使用 ObjectMapper 來手動對物件進行脫敏操作,確保在內部使用時也能達到相同的脫敏效果。

內部脫敏

接下來,在這個示例中,我們會演示如何透過脫敏處理來保護敏感資訊的隱私。以下是具體的程式碼實現:

List<ResultInfoVO> list = selectResultByCondition(searchVO);
ObjectMapper objectMapper = new ObjectMapper();
String s = objectMapper.writeValueAsString(list);
list = objectMapper.readValue(s, new com.fasterxml.jackson.core.type.TypeReference<List<ResultInfoVO>>() {});

“透過這種方式,資料會自動進行脫敏處理。實際上,整個過程只是透過序列化將物件轉換成可傳輸的格式,再經過反序列化恢復成原始物件的過程。

總結

在資料安全日益重要的今天,敏感資料的脫敏處理顯得尤為關鍵,尤其是在涉及個人隱私和財務資訊時。本文探討了如何透過自定義註解,在不引入第三方庫的情況下,使用Spring框架進行資料脫敏處理。我們透過具體的示例展示瞭如何為常見的敏感資料型別(如電話號碼、身份證、電子郵件等)編寫自定義註解,並在序列化過程中應用脫敏規則。透過這些註解,敏感資訊可以在資料返回前端時自動進行脫敏,避免洩露。


我是努力的小雨,一名 Java 服務端碼農,潛心研究著 AI 技術的奧秘。我熱愛技術交流與分享,對開源社群充滿熱情。同時也是一位騰訊雲創作之星、阿里雲專家博主、華為云云享專家、掘金優秀作者。

💡 我將不吝分享我在技術道路上的個人探索與經驗,希望能為你的學習與成長帶來一些啟發與幫助。

🌟 歡迎關注努力的小雨!🌟

相關文章