日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Springboot整合Hutool自定義注解實現數據脫敏

來源: 責編: 時間:2023-10-10 18:32:15 343觀看
導讀一、前言我們在項目中會處理敏感數據(如手機號、身份證號、姓名、地址等)時,通常需要對這些數據進行脫敏,以確保數據隱私和安全。我們本次使用 Hutool 庫來輕松實現數據脫敏,如果項目中不讓使用,可以自己防著hutool來寫一些

nbw28資訊網——每日最新資訊28at.com

一、前言

我們在項目中會處理敏感數據(如手機號、身份證號、姓名、地址等)時,通常需要對這些數據進行脫敏,以確保數據隱私和安全。nbw28資訊網——每日最新資訊28at.com

我們本次使用 Hutool 庫來輕松實現數據脫敏,如果項目中不讓使用,可以自己防著hutool來寫一些工具類。nbw28資訊網——每日最新資訊28at.com

本次使用Springboot整合Hutool來自定義注解實現數據脫敏!nbw28資訊網——每日最新資訊28at.com

二、什么是數據脫敏

數據脫敏(Data Masking),也稱為數據遮蔽或數據隱藏,是一種數據保護技術,用于處理和存儲敏感數據時,以減少或消除數據中的敏感信息,從而保護數據的隱私和安全。數據脫敏的主要目的是在保持數據可用性的同時,減少數據泄露和濫用的風險。nbw28資訊網——每日最新資訊28at.com

「數據脫敏一般指數據庫正常存儲,返回前端時進行數據庫處理!」nbw28資訊網——每日最新資訊28at.com

三、Hutool簡介

Hutool是一個小而全的Java工具類庫,通過靜態方法封裝,降低相關API的學習成本,提高工作效率,使Java擁有函數式語言般的優雅,讓Java語言也可以“甜甜的”。nbw28資訊網——每日最新資訊28at.com

Hutool是項目中“util”包友好的替代,它節省了開發人員對項目中公用類和公用工具方法的封裝時間,使開發專注于業務,同時可以最大限度的避免封裝不完善帶來的bug。nbw28資訊網——每日最新資訊28at.com

雖然Hutool可能會有一些bug,比起小編寫的還是強上不少的,所以選定它來!nbw28資訊網——每日最新資訊28at.com

現在最新版為:5.8.16,我們直接使用最新的,bug會少一些,功能會完善一些!nbw28資訊網——每日最新資訊28at.com

支持的脫敏規則:nbw28資訊網——每日最新資訊28at.com

  • 用戶id
  • 中文姓名
  • 身份證號
  • 座機號
  • 手機號
  • 地址
  • 電子郵件
  • 密碼
  • 中國大陸車牌,包含普通車輛、新能源車輛
  • 銀行卡

四、實戰整合

1、導入依賴

<dependency>    <groupId>cn.hutool</groupId>    <artifactId>hutool-all</artifactId>    <version>5.8.16</version></dependency>

2、自定義注解

@JsonSerialize(using = SensitiveInfoSerializer.class)用于指定在序列化時應該使用哪個自定義序列化器類nbw28資訊網——每日最新資訊28at.com

「需要和下面的注解搭配使用SensitiveInfoSerializer我們自定義的序列化器才會生效」nbw28資訊網——每日最新資訊28at.com

@JacksonAnnotationsInside 主要用于標記其他自定義注解,這意味著你可以在一個 Jackson 注解內部使用其他自定義注解,以組合各種注解來實現更復雜的序列化和反序列化邏輯。nbw28資訊網——每日最新資訊28at.com

/** * @author wangzhenjun * @date 2023/9/11 14:15 */@JacksonAnnotationsInside@JsonSerialize(using = SensitiveInfoSerializer.class)@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface Desensitization {    DesensitizationType type() default DesensitizationType.DEFAULT;    /**     * 前置不需要打碼的長度     */    int prefixLen() default 0;    /**     * 后置不需要打碼的長度     */    int suffixLen() default 0;    /**     * 遮罩字符     */    String maskingChar() default "*";}

3、支持類型枚舉

/** * @author wangzhenjun * @date 2023/9/11 14:43 */public enum DesensitizationType {    // 自定義規則    CUSTOMIZE_RULE,    // 默認的    DEFAULT,    //用戶id    USER_ID,    //中文名    CHINESE_NAME,    //身份證號    ID_CARD,    //座機號    FIXED_PHONE,    //手機號    MOBILE_PHONE,    //地址    ADDRESS,    //電子郵件    EMAIL,    //密碼    PASSWORD,    //中國大陸車牌,包含普通車輛、新能源車輛    CAR_LICENSE,    //銀行卡    BANK_CARD}

4、自定義序列化器

關于自定義的規則,大家可以根據自己的需求來寫工具類,我這里簡單使用Hutool的工具來了!nbw28資訊網——每日最新資訊28at.com

StrUtil.replace(value, prefixLen, suffixLen, maskingChar)StrUtil.hide(value, prefixLen, suffixLen)nbw28資訊網——每日最新資訊28at.com

createContextual 方法首先在序列化過程開始時被調用,返回的序列化器實例將用于后續的序列化過程。nbw28資訊網——每日最新資訊28at.com

serialize 方法負責實際的序列化邏輯,將字段的值轉換為JSON,并可以在其中執行自定義的脫敏邏輯。nbw28資訊網——每日最新資訊28at.com

/** * 數據脫敏序列化器 * * @author wangzhenjun * @date 2023/9/11 14:16 */public class SensitiveInfoSerializer extends JsonSerializer<String> implements ContextualSerializer {    private boolean useMasking = false;    private DesensitizationType type;    private int prefixLen;    private int suffixLen;    private String maskingChar;    @Override    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {        if (useMasking && value != null) {            switch (type) {                case MOBILE_PHONE:                    gen.writeString(DesensitizedUtil.mobilePhone(value));                    break;                case ID_CARD:                    gen.writeString(DesensitizedUtil.idCardNum(value, prefixLen, suffixLen));                    break;                case CUSTOMIZE_RULE://                    gen.writeString(StrUtil.replace(value, prefixLen, suffixLen, maskingChar));                    gen.writeString(StrUtil.hide(value, prefixLen, suffixLen));                    break;                case CHINESE_NAME:                    gen.writeString(DesensitizedUtil.chineseName(value));                    break;                case DEFAULT:                    gen.writeString(value);                default:                    gen.writeString(value);            }        } else {            gen.writeObject(value);        }    }    @Override    public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) {        if (property != null) {            Desensitization desensitization = property.getAnnotation(Desensitization.class);            if (desensitization != null) {                this.type = desensitization.type();                this.prefixLen = desensitization.prefixLen();                this.suffixLen = desensitization.suffixLen();                this.maskingChar = desensitization.maskingChar();                useMasking = true;            }        }        return this;    }}

5、實體類應用

/** * @author wangzhenjun * @date 2023/9/12 9:15 */@Datapublic class User {    @Desensitization(type = DesensitizationType.ID_CARD,prefixLen = 6,suffixLen = 16)    private String cardId;    @Desensitization(type = DesensitizationType.CHINESE_NAME)    private String name;    @Desensitization(type = DesensitizationType.MOBILE_PHONE)    private String phone;    @Desensitization(type = DesensitizationType.CUSTOMIZE_RULE,prefixLen = 3,suffixLen = 6)    private String info;}

6、測試

@GetMapping("/getUser")public Result getUser(){    User user = new User();    user.setCardId("372911111111111111");    user.setPhone("15822229999");    user.setName("趙飛燕");    user.setInfo("這是機密文件,該打碼打碼");    return Result.success(user);}

完美脫敏,此次應該有掌聲!nbw28資訊網——每日最新資訊28at.com

nbw28資訊網——每日最新資訊28at.com

五、總結

本文通過Spring Boot與Hutool庫的結合使用自定義注解,提供了一個簡單而強大的方式來實現數據脫敏。希望能幫助到你,成功地實現數據脫敏功能,并提高應用程序的安全性。nbw28資訊網——每日最新資訊28at.com

本次例子脫敏選項沒有演示全,大家可以自行補充完成,成為你們需要的數據脫敏策略,從而完美的處理用戶數據脫敏問題!nbw28資訊網——每日最新資訊28at.com

可以試著使用AOP來完成脫敏,有興趣的可以試一下哈!nbw28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-12748-0.htmlSpringboot整合Hutool自定義注解實現數據脫敏

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: PixiJS 源碼解讀:繪制矩形的渲染過程講解

下一篇: Go 語言中 panic 和 recover 搭配使用

標簽:
  • 熱門焦點
  • 鴻蒙OS 4.0公測機型公布:甚至連nova6都支持

    華為全新的HarmonyOS 4.0操作系統將于今天下午正式登場,官方在發布會之前也已經正式給出了可升級的機型產品,這意味著這些機型會率先支持升級享用。這次的HarmonyOS 4.0支持
  • MIX Fold3包裝盒泄露 新機本月登場

    小米的全新折疊屏旗艦MIX Fold3將于本月發布,近日該機的真機包裝盒在網上泄露。從圖上來看,新的MIX Fold3包裝盒在外觀設計方面延續了之前的方案,變化不大,這也是目前小米旗艦
  • 消息稱迪士尼要拍真人版《魔發奇緣》:女主可能也找黑人演員

    8月5日消息,迪士尼確實有點忙,忙著將不少動畫改成真人版,繼《美人魚》后,真人版《白雪公主》、《魔發奇緣》也在路上了。據外媒消息稱,迪士尼將打造真人版
  • 摸魚心法第一章——和配置文件說拜拜

    為了能摸魚我們團隊做了容器化,但是帶來的問題是服務配置文件很麻煩,然后大家在群里進行了“親切友好”的溝通圖片圖片圖片圖片對比就對比,簡單對比下獨立配置中心和k8s作為配
  • 三分鐘白話RocketMQ系列—— 如何發送消息

    我們知道RocketMQ主要分為消息 生產、存儲(消息堆積)、消費 三大塊領域。那接下來,我們白話一下,RocketMQ是如何發送消息的,揭秘消息生產全過程。注意,如果白話中不小心提到相關代
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對&ldquo;勢&rdquo;的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯網那些事&ldquo;起猛了,我能看得懂日語了&rdquo;。&ldquo;為什么日本人說話我能聽懂?&rdquo;&ldquo;中文不像中文,日語不像日語,但是我竟然看懂了&rdquo;&hellip;&hell
  • 聯想小新Pad Pro 12.6將要推出,搭載高通驍龍 870 處理器

    聯想小新Pad Pro 12.6將于秋季新品會上推出,官方按照慣例直接在發布會前給出了機型的所有參數。聯想小新 Pad Pro 12.6 將搭載高通驍龍 870 處理器,重量為 5
  • 電博會與軟博會實現"線下+云端"的雙線融合

    在本次“電博會”與“軟博會”雙展會利好條件的加持下,既可以發揮展會拉動人流、信息流、資金流實現快速交互流動的作用,繼而推動區域經濟良性發展;又可以聚
Top 主站蜘蛛池模板: 乐业县| 永修县| 顺平县| 海伦市| 安化县| 龙南县| 改则县| 南开区| 康保县| 临朐县| 怀宁县| 阿勒泰市| 玉林市| 孟连| 贵州省| 苍南县| 六安市| 阿瓦提县| 张家川| 梁平县| 林芝县| 佛冈县| 绥滨县| 遵义市| 雅安市| 老河口市| 景东| 西青区| 延长县| 桦川县| 沂水县| 黄山市| 门源| 龙门县| 信丰县| 仲巴县| 奉贤区| 万山特区| 惠州市| 德保县| 门源|