AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

Springboot整合Hutool自定義注解實(shí)現(xiàn)數(shù)據(jù)脫敏

來源: 責(zé)編: 時(shí)間:2023-10-10 18:32:15 315觀看
導(dǎo)讀一、前言我們?cè)陧?xiàng)目中會(huì)處理敏感數(shù)據(jù)(如手機(jī)號(hào)、身份證號(hào)、姓名、地址等)時(shí),通常需要對(duì)這些數(shù)據(jù)進(jìn)行脫敏,以確保數(shù)據(jù)隱私和安全。我們本次使用 Hutool 庫來輕松實(shí)現(xiàn)數(shù)據(jù)脫敏,如果項(xiàng)目中不讓使用,可以自己防著hutool來寫一些

tIu28資訊網(wǎng)——每日最新資訊28at.com

一、前言

我們?cè)陧?xiàng)目中會(huì)處理敏感數(shù)據(jù)(如手機(jī)號(hào)、身份證號(hào)、姓名、地址等)時(shí),通常需要對(duì)這些數(shù)據(jù)進(jìn)行脫敏,以確保數(shù)據(jù)隱私和安全。tIu28資訊網(wǎng)——每日最新資訊28at.com

我們本次使用 Hutool 庫來輕松實(shí)現(xiàn)數(shù)據(jù)脫敏,如果項(xiàng)目中不讓使用,可以自己防著hutool來寫一些工具類。tIu28資訊網(wǎng)——每日最新資訊28at.com

本次使用Springboot整合Hutool來自定義注解實(shí)現(xiàn)數(shù)據(jù)脫敏!tIu28資訊網(wǎng)——每日最新資訊28at.com

二、什么是數(shù)據(jù)脫敏

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

「數(shù)據(jù)脫敏一般指數(shù)據(jù)庫正常存儲(chǔ),返回前端時(shí)進(jìn)行數(shù)據(jù)庫處理!」tIu28資訊網(wǎng)——每日最新資訊28at.com

三、Hutool簡介

Hutool是一個(gè)小而全的Java工具類庫,通過靜態(tài)方法封裝,降低相關(guān)API的學(xué)習(xí)成本,提高工作效率,使Java擁有函數(shù)式語言般的優(yōu)雅,讓Java語言也可以“甜甜的”。tIu28資訊網(wǎng)——每日最新資訊28at.com

Hutool是項(xiàng)目中“util”包友好的替代,它節(jié)省了開發(fā)人員對(duì)項(xiàng)目中公用類和公用工具方法的封裝時(shí)間,使開發(fā)專注于業(yè)務(wù),同時(shí)可以最大限度的避免封裝不完善帶來的bug。tIu28資訊網(wǎng)——每日最新資訊28at.com

雖然Hutool可能會(huì)有一些bug,比起小編寫的還是強(qiáng)上不少的,所以選定它來!tIu28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在最新版為:5.8.16,我們直接使用最新的,bug會(huì)少一些,功能會(huì)完善一些!tIu28資訊網(wǎng)——每日最新資訊28at.com

支持的脫敏規(guī)則:tIu28資訊網(wǎng)——每日最新資訊28at.com

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

四、實(shí)戰(zhàn)整合

1、導(dǎo)入依賴

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

2、自定義注解

@JsonSerialize(using = SensitiveInfoSerializer.class)用于指定在序列化時(shí)應(yīng)該使用哪個(gè)自定義序列化器類tIu28資訊網(wǎng)——每日最新資訊28at.com

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

@JacksonAnnotationsInside 主要用于標(biāo)記其他自定義注解,這意味著你可以在一個(gè) Jackson 注解內(nèi)部使用其他自定義注解,以組合各種注解來實(shí)現(xiàn)更復(fù)雜的序列化和反序列化邏輯。tIu28資訊網(wǎng)——每日最新資訊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 {    // 自定義規(guī)則    CUSTOMIZE_RULE,    // 默認(rèn)的    DEFAULT,    //用戶id    USER_ID,    //中文名    CHINESE_NAME,    //身份證號(hào)    ID_CARD,    //座機(jī)號(hào)    FIXED_PHONE,    //手機(jī)號(hào)    MOBILE_PHONE,    //地址    ADDRESS,    //電子郵件    EMAIL,    //密碼    PASSWORD,    //中國大陸車牌,包含普通車輛、新能源車輛    CAR_LICENSE,    //銀行卡    BANK_CARD}

4、自定義序列化器

關(guān)于自定義的規(guī)則,大家可以根據(jù)自己的需求來寫工具類,我這里簡單使用Hutool的工具來了!tIu28資訊網(wǎng)——每日最新資訊28at.com

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

createContextual 方法首先在序列化過程開始時(shí)被調(diào)用,返回的序列化器實(shí)例將用于后續(xù)的序列化過程。tIu28資訊網(wǎng)——每日最新資訊28at.com

serialize 方法負(fù)責(zé)實(shí)際的序列化邏輯,將字段的值轉(zhuǎn)換為JSON,并可以在其中執(zhí)行自定義的脫敏邏輯。tIu28資訊網(wǎng)——每日最新資訊28at.com

/** * 數(shù)據(jù)脫敏序列化器 * * @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、實(shí)體類應(yīng)用

/** * @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("這是機(jī)密文件,該打碼打碼");    return Result.success(user);}

完美脫敏,此次應(yīng)該有掌聲!tIu28資訊網(wǎng)——每日最新資訊28at.com

tIu28資訊網(wǎng)——每日最新資訊28at.com

五、總結(jié)

本文通過Spring Boot與Hutool庫的結(jié)合使用自定義注解,提供了一個(gè)簡單而強(qiáng)大的方式來實(shí)現(xiàn)數(shù)據(jù)脫敏。希望能幫助到你,成功地實(shí)現(xiàn)數(shù)據(jù)脫敏功能,并提高應(yīng)用程序的安全性。tIu28資訊網(wǎng)——每日最新資訊28at.com

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

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

本文鏈接:http://www.tebozhan.com/showinfo-26-12748-0.htmlSpringboot整合Hutool自定義注解實(shí)現(xiàn)數(shù)據(jù)脫敏

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

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

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

標(biāo)簽:
  • 熱門焦點(diǎn)
  • K60至尊版剛預(yù)熱 一加Ace2 Pro正面硬剛

    Redmi這邊剛?cè)缁鹑巛钡男麄髁薑60 Ultra的各種技術(shù)和硬件配置,作為競品的一加也坐不住了。一加中國區(qū)總裁李杰發(fā)布了兩條微博,表示在自家的一加Ace2上早就已經(jīng)采用了和PixelWo
  • 紅魔電競平板評(píng)測:大屏幕硬實(shí)力

    前言:三年的疫情因?yàn)橐暇W(wǎng)課的原因激活了平板市場,如今網(wǎng)課的時(shí)代已經(jīng)過去,大家的生活都恢復(fù)到了正軌,這也就意味著,真正考驗(yàn)平板電腦生存的環(huán)境來了。也就是面對(duì)著這種殘酷的
  • Redmi Pad評(píng)測:紅米充滿野心的一次嘗試

    從Note系列到K系列,從藍(lán)牙耳機(jī)到筆記本電腦,紅米不知不覺之間也已經(jīng)形成了自己頗有競爭力的產(chǎn)品體系,在中端和次旗艦市場上甚至要比小米新機(jī)的表現(xiàn)來得更好,正所謂“大丈夫生居
  • 6月iOS設(shè)備性能榜:M2穩(wěn)居榜首 A系列只能等一手3nm來救

    沒有新品發(fā)布,自然iOS設(shè)備性能榜的上榜設(shè)備就沒有什么更替,僅僅只有跑分變化而產(chǎn)生的排名變動(dòng),畢竟蘋果新品的發(fā)布節(jié)奏就是這樣的,一年下來也就幾個(gè)移動(dòng)端新品,不會(huì)像安卓廠商,一
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時(shí)候了!學(xué)弟,最近學(xué)習(xí)的怎么樣啊 了不起學(xué)弟:最近學(xué)習(xí)的還不錯(cuò),每天都在學(xué)習(xí),每天都在進(jìn)步! 了不起:那你最近學(xué)習(xí)的什么呢? 了不起學(xué)弟:最近在學(xué)習(xí)C
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運(yùn)營研究社作者 | 張知白編輯 | 楊佩汶設(shè)計(jì) | 晏談夢潔這個(gè)暑期,旅游賽道徹底火了:有的「地方」火了&mdash;&mdash;貴州村超旅游收入 1 個(gè)月超過 12 億;有的「博主」火了&m
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產(chǎn)懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風(fēng)頭無兩。你可以說陳思誠的
  • 國行版三星Galaxy Z Fold5/Z Flip5發(fā)布 售價(jià)7499元起

    2023年8月3日,三星電子舉行Galaxy新品中國發(fā)布會(huì),正式在國內(nèi)推出了新一代折疊屏智能手機(jī)三星Galaxy Z Fold5與Galaxy Z Flip5,以及三星Galaxy Tab S9
  • 與兆芯合作 聯(lián)想推出全新旗艦版筆記本電腦開天N7系列

    聯(lián)想與兆芯合作推出全新聯(lián)想旗艦版筆記本電腦開天 N7系列。這個(gè)系列采用兆芯KX-6640MA處理器平臺(tái),KX-6640MA 處理器是采用了陸家嘴架構(gòu),16nm 工藝,4 核 4 線
Top