springboot 實現敏感信息脫敏

記錄于2025年4月28號晚上--梧州少帥

1. 定義枚舉類:

public enum DesensitizeType {NAME, EMAIL
}

2. 創建自定義注解:

用于標記需要脫敏的字段及其類型。

@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = DesensitizeSerializer.class)
public @interface Desensitize {DesensitizeType type();
}

3. 實現自定義序列化器:

根據注解類型應用不同的脫敏規則。

public class DesensitizeSerializer extends JsonSerializer<String> implements ContextualSerializer {private DesensitizeType type;@Overridepublic void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {switch (type) {case NAME:gen.writeString(desensitizeName(value));break;case EMAIL:gen.writeString(desensitizeEmail(value));break;default:gen.writeString(value);}}private String desensitizeName(String name) {if (name == null || name.isEmpty()) return "";if (name.length() == 1) return name;return name.charAt(0) + "*".repeat(Math.max(0, name.length() - 1));}private String desensitizeEmail(String email) {if (email == null || !email.contains("@")) return email;String[] parts = email.split("@");String local = parts[0];String domain = parts[1];if (local.length() <= 2) return "***@" + domain;return local.substring(0, 2) + "***@" + domain;}@Overridepublic JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) {Desensitize annotation = property.getAnnotation(Desensitize.class);if (annotation != null) {DesensitizeSerializer serializer = new DesensitizeSerializer();serializer.type = annotation.type();return serializer;}return this;}
}

4. 在DTO中應用注解:

在需要脫敏的字段上添加@Desensitize注解。

public class UserDTO {@Desensitize(type = DesensitizeType.NAME)private String name;@Desensitize(type = DesensitizeType.EMAIL)private String email;// Getters and Setters
}

需要添加的依賴:

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.5</version>
</dependency>

測試:

public static void main(String[] args) throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();UserDTO build = UserDTO.builder().name("黃成宇").email("huangchengyu1@byd.com").build();String json = objectMapper.writeValueAsString(build);System.out.println(json);}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903270.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903270.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903270.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SNMP協議之詳解(Detailed Explanation of SNMP Protocol)

SNMP協議之詳解 一、前言 SNMP&#xff0c;被形象地喻為網絡世界大的工具箱&#xff0c;使他們能的“智慧守護者”&#xff0c;它為網絡管理員裝備了一套功能強夠實現對網絡設備狀態的實時監控、性能數據的全面收集、遠程配置的靈活管理以及故障事件的即時響應。借助SNMP&…

SpeedyAutoLoot

SpeedyAutoLoot自動拾取插件 SpeedyAutoLoot.lua local AutoLoot CreateFrame(Frame)SpeedyAutoLootDB SpeedyAutoLootDB or {} SpeedyAutoLootDB.global SpeedyAutoLootDB.global or {}local BACKPACK_CONTAINER BACKPACK_CONTAINER local LOOT_SLOT_CURRENCY LOOT_SLOT…

xe-upload上傳文件插件

1.xe-upload地址&#xff1a;文件選擇、文件上傳組件&#xff08;圖片&#xff0c;視頻&#xff0c;文件等&#xff09; - DCloud 插件市場 2.由于開發app要用到上傳文件組件&#xff0c;uni.chooseFile在app上不兼容&#xff0c;所以找到了xe-upload&#xff0c;兼容性很強&a…

Golang|外觀模式和具體邏輯

最終返回的是Document的切片&#xff0c;然后取得Bytes自己再去做反序列化拿到文檔的各種詳細信息。 外觀模式是一種結構型設計模式&#xff0c;它的目的是為復雜的子系統提供一個統一的高層接口&#xff0c;讓外部調用者&#xff08;客戶端&#xff09;可以更簡單地使用子系統…

2025年3月AGI技術月評|技術突破重構數字世界底層邏輯

〔更多精彩AI內容&#xff0c;盡在 「魔方AI空間」 &#xff0c;引領AIGC科技時代〕 本文作者&#xff1a;貓先生 ——當「無限照片」遇上「可控試穿」&#xff0c;我們正在見證怎樣的智能革命&#xff1f; 被低估的進化&#xff1a;開源力量改寫游戲規則 當巨頭們在AGI賽道…

可解釋人工智能(XAI):讓機器決策透明化

在人工智能&#xff08;AI&#xff09;技術飛速發展的今天&#xff0c;AI 系統已經廣泛應用于金融、醫療、交通等多個關鍵領域。然而&#xff0c;隨著 AI 系統的復雜性不斷增加&#xff0c;尤其是深度學習模型的廣泛應用&#xff0c;AI 的“黑箱”問題逐漸凸顯。AI 系統的決策過…

【Go語言】ORM(對象關系映射)庫

github.com/jinzhu/gorm 是 Go 語言中一個非常流行的 ORM&#xff08;對象關系映射&#xff09;庫&#xff0c;用于簡化與關系型數據庫的交互。以下是關于它的關鍵信息&#xff1a; 核心特點 全功能 ORM 支持主流數據庫&#xff1a;MySQL、PostgreSQL、SQLite、SQL Server 等。…

大數據企業實驗室管理的痛點 質檢LIMS系統在大數據企業的應用

在數字化轉型浪潮中&#xff0c;大數據企業正面臨海量數據管理與質量控制的雙重挑戰。實驗室作為數據生產的核心環節&#xff0c;其檢測流程的規范化、數據處理的智能化直接關系到企業數據資產的可靠性。質檢LIMS&#xff08;實驗室信息管理系統&#xff09;通過整合實驗室資源…

在Arduino U8g2庫中顯示中文的方法

U8g2庫支持中文顯示&#xff0c;但需要手動添加中文字體或使用內置的有限中文字符。以下是具體實現方法&#xff1a; 方法一 使用U8g2內置的中文字體&#xff08;不推薦&#xff09; 缺點&#xff1a;內置字體支持的漢字較少&#xff0c;可能無法顯示所有需要的字符。不推薦。…

自動駕駛分級

一、美國 SAE J3016 Taxonomy and Definitions for Terms Related to Driving Automation Systems for On-Road Motor Vehicles(2021) 1、駕駛自動化級別&#xff08;Levels of Driving Automation&#xff09; 共分為 6 個級別&#xff0c;從 無自動化&#xff08;0&#…

工業園區工廠企業數字IP廣播應急呼叫對講系統:數字IP廣播極大提升工廠企業管理效率與應急響應效能

工業園區工廠企業數字IP廣播應急呼叫對講系統:數字IP廣播極大提升工廠企業管理效率與應急響應效能 北京海特偉業科技有限公司任洪卓發布于2025年4月28日 在數字化轉型浪潮下&#xff0c;IP應急廣播呼叫對講廣播系統憑借其網絡化、智能化、融合化、多元化等優勢&#xff0c;已…

DNS主從同步及解析

DNS 域名解析原理 域名系統的層次結構 &#xff1a;DNS 采用分層樹狀結構&#xff0c;頂級域名&#xff08;如.com、.org、.net 等&#xff09;位于頂層&#xff0c;下面是二級域名、三級域名等。例如&#xff0c;在域名 “www.example.com” 中&#xff0c;“com” 是頂級域名…

再看 BBR 到 BBRv3 的公平性改進

從看一篇論文開始&#xff1a;Performance Evaluation of TCP BBRv3 in Networks with Multiple Round Trip Times&#xff0c;結論比較悲觀&#xff1a; 雖然 BBRv2/3 試圖解決 BBRv1 的公平性問題&#xff0c;但結果依舊不夠理想&#xff0c;BBR 的迭代依舊任重而道遠。 BB…

locust壓力測試

安裝 pip install locust驗證是否安裝成功 locust -V使用 網上的教程基本上是前幾年的&#xff0c;locust已經更新了好幾個版本&#xff0c;有點過時了&#xff0c;在此做一個總結 啟動 默認是使用瀏覽器進行設置的 # 使用瀏覽器 locust -f .\main.py其他參數 Usage: locust […

優先隊列和單調隊列(雙端隊列實現的)

這里寫自定義目錄標題 一、優先隊列與單調隊列二、優先隊列2.1 概念2.2 增刪查 判空2.3 示例代碼 三、雙端隊列四、單調隊列4.1 單調遞增隊列4.2 單調遞減隊列 一、優先隊列與單調隊列 二、優先隊列 2.1 概念 一種特殊的隊列&#xff0c;它與普通隊列的主要區別在于元素的出…

如何在idea中寫spark程序

在 IntelliJ IDEA 中編寫 Spark 程序是一個高效且便捷的方式&#xff0c;以下是一個詳細的步驟指南&#xff0c;幫助你在 IntelliJ IDEA 中創建和運行 Spark 程序。 一、環境準備 安裝 Java&#xff1a; 確保已經安裝了 JDK 1.8 或更高版本。可以通過以下命令檢查&#xff1a;…

BERT BERT

BERT ***** 2020年3月11日更新&#xff1a;更小的BERT模型 ***** 這是在《深閱讀的學生學得更好&#xff1a;預訓練緊湊模型的重要性》&#xff08;arXiv:1908.08962&#xff09;中提到的24種較小規模的英文未分詞BERT模型的發布。 我們已經證明&#xff0c;標準的BERT架構和…

SpringBoot啟動警告:OpenJDK 64-Bit Server VM warning

問題描述 以Debug模式啟動Spring boot項目之后&#xff0c;日志打印&#xff1a;OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended&#xff0c; 警告信息 解決方案&#xff1a;配置VM opt…

“該虛擬機似乎正在使用中“

當某一天打開虛擬機突然彈出"該虛擬機似乎正在使用中"。 遇到這種問題的解決方法很簡單&#xff0c;出現這種問題是因為錯誤關閉虛擬機導致&#xff0c;當我們點擊獲取所有權時發現不能解決問題。這里分享一種簡單的解決方法。 打開虛擬機的文件目錄 找到lck文件夾下…

【CSS】層疊,優先級與繼承(三):超詳細繼承知識點

目錄 繼承一、什么是繼承&#xff1f;2.1 祖先元素2.2 默認繼承/默認不繼承 二、可繼承屬性2.1 字體相關屬性2.2 文本相關屬性2.3 列表相關屬性 三、不可繼承屬性3.1 盒模型相關屬性3.2 背景相關屬性 四、屬性初始值4.1 根元素4.2 屬性的初始值4.3 得出結論 五、強制繼承5.1 in…