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

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

輕松實現 SpringBoot 中的隱私數據脫敏處理

來源: 責編: 時間:2024-02-05 09:31:55 294觀看
導讀前言這兩天在整改等保測出的問題,里面有一個用戶信息泄露的風險項(就是后臺系統里用戶的一些隱私數據直接明文顯示了),其實指的就是要做數據脫敏。數據脫敏:把系統里的一些敏感數據進行加密處理后再返回,達到保護隱私作用,實

前言

這兩天在整改等保測出的問題,里面有一個用戶信息泄露的風險項(就是后臺系統里用戶的一些隱私數據直接明文顯示了),其實指的就是要做數據脫敏。Qes28資訊網——每日最新資訊28at.com

數據脫敏:把系統里的一些敏感數據進行加密處理后再返回,達到保護隱私作用,實現效果圖如下:Qes28資訊網——每日最新資訊28at.com

圖片圖片Qes28資訊網——每日最新資訊28at.com

其實要實現上面的效果,可能最先想到的方法是直接改每個接口,在返回數據前做一次加密處理,當然這個方法肯定是非常撈的。這里推薦用注解來實現,即高效又優雅,省時省力,支持擴展。Qes28資訊網——每日最新資訊28at.com

其實解決方案大體上分兩種:Qes28資訊網——每日最新資訊28at.com

  • 在拿到數據時就已經脫敏了(如在 mysql 查詢時用 insert 函數進行隱藏)
  • 拿到數據后在序列化的時候再進行脫敏(如用 fastjson、jackson)

這里我所選用的方案是第二種,即在接口返回數據前,在序列化的時候對敏感字段值進行處理,并且選用 jackson 的序列化來實現(推薦)Qes28資訊網——每日最新資訊28at.com

實現

創建隱私數據類型枚舉

/** * 隱私數據類型枚舉 */@Getterpublic enum PrivacyTypeEnum {  /** 自定義(此項需設置脫敏的范圍)*/  CUSTOMER,  /** 姓名 */  NAME,  /** 身份證號 */  ID_CARD,  /** 手機號 */  PHONE,  /** 郵箱 */  EMAIL,}

創建自定義隱私注解

/** * 自定義數據脫敏注解 */@Target(ElementType.FIELD) // 作用在字段上@Retention(RetentionPolicy.RUNTIME) // class文件中保留,運行時也保留,能通過反射讀取到@JacksonAnnotationsInside // 表示自定義自己的注解PrivacyEncrypt@JsonSerialize(using = PrivacySerializer.class) // 該注解使用序列化的方式public @interface PrivacyEncrypt {    /**     * 脫敏數據類型(沒給默認值,所以使用時必須指定type)     */    PrivacyTypeEnum type();    /**     * 前置不需要打碼的長度     */    int prefixNoMaskLen() default 1;    /**     * 后置不需要打碼的長度     */    int suffixNoMaskLen() default 1;    /**     * 用什么打碼     */    String symbol() default "*";}

創建自定義序列化器

@NoArgsConstructor@AllArgsConstructorpublic class PrivacySerializer extends JsonSerializer<String> implements ContextualSerializer {    // 脫敏類型    private PrivacyTypeEnum privacyTypeEnum;    // 前幾位不脫敏    private Integer prefixNoMaskLen;    // 最后幾位不脫敏    private Integer suffixNoMaskLen;    // 用什么打碼    private String symbol;    @Override    public void serialize(String origin, final JsonGenerator jsonGenerator,                          final SerializerProvider serializerProvider) throws IOException {        if (StrUtil.isEmpty(origin)) {            origin = null;        }        if (null != privacyTypeEnum) {            switch (privacyTypeEnum) {                case CUSTOMER:                    jsonGenerator.writeString(PrivacyUtil.desValue(origin, prefixNoMaskLen, suffixNoMaskLen, symbol));                    break;                case NAME:                    jsonGenerator.writeString(PrivacyUtil.hideChineseName(origin));                    break;                case ID_CARD:                    jsonGenerator.writeString(PrivacyUtil.hideIDCard(origin));                    break;                case PHONE:                    jsonGenerator.writeString(PrivacyUtil.hidePhone(origin));                    break;                case EMAIL:                    jsonGenerator.writeString(PrivacyUtil.hideEmail(origin));                    break;                default:                    throw new IllegalArgumentException("unknown privacy type enum " + privacyTypeEnum);            }        }    }    @Override    public JsonSerializer<?> createContextual(final SerializerProvider serializerProvider,                                              final BeanProperty beanProperty) throws JsonMappingException {        if (null != beanProperty) {            if (Objects.equals(beanProperty.getType().getRawClass(), String.class)) {                PrivacyEncrypt privacyEncrypt = beanProperty.getAnnotation(PrivacyEncrypt.class);                if (null == privacyEncrypt) {                    privacyEncrypt = beanProperty.getContextAnnotation(PrivacyEncrypt.class);                }                if (null != privacyEncrypt) {                    return new PrivacySerializer(privacyEncrypt.type(), privacyEncrypt.prefixNoMaskLen(),                            privacyEncrypt.suffixNoMaskLen(), privacyEncrypt.symbol());                }            }            return serializerProvider.findValueSerializer(beanProperty.getType(), beanProperty);        }        return serializerProvider.findNullValueSerializer(null);    }}

這里是具體的實現過程,因為要脫敏的數據都是 String 類型的,所以繼承 JsonSerializer 時的類型填 StringQes28資訊網——每日最新資訊28at.com

  • 重寫的 serialize 方法是實現脫敏的核心,根據類型 type 的不同去設置序列化后的值
  • 重寫的 createContextual 方法,就是去讀取我們自定義的 PrivacyEncrypt 注解,打造一個上下文的環境

隱私數據隱藏工具類

public class PrivacyUtil {    /**     * 中文名脫敏     */    public static String hideChineseName(String chineseName) {        if (StrUtil.isEmpty(chineseName)) {            return null;        }        if (chineseName.length() <= 2) {            return desValue(chineseName, 1, 0, "*");        }        return desValue(chineseName, 1, 1, "*");    }    /**     * 手機號脫敏     */    public static String hidePhone(String phone) {        if (StrUtil.isEmpty(phone)) {            return null;        }        return phone.replaceAll("(//d{3})//d{4}(//d{4})", "$1****$2"); // 隱藏中間4位//        return desValue(phone, 3, 4, "*"); // 隱藏中間4位//        return desValue(phone, 7, 0, "*"); // 隱藏末尾4位    }    /**     * 郵箱脫敏     */    public static String hideEmail(String email) {        if (StrUtil.isEmpty(email)) {            return null;        }        return email.replaceAll("(//w?)(//w+)(//w)(@//w+//.[a-z]+(//.[a-z]+)?)", "$1****$3$4");    }    /**     * 身份證號脫敏     */    public static String hideIDCard(String idCard) {        if (StrUtil.isEmpty(idCard)) {            return null;        }        return idCard.replaceAll("(//d{4})//d{10}(//w{4})", "$1*****$2");    }    /**     * 對字符串進行脫敏操作     * @param origin          原始字符串     * @param prefixNoMaskLen 左側需要保留幾位明文字段     * @param suffixNoMaskLen 右側需要保留幾位明文字段     * @param maskStr         用于遮罩的字符串, 如'*'     * @return 脫敏后結果     */    public static String desValue(String origin, int prefixNoMaskLen, int suffixNoMaskLen, String maskStr) {        if (StrUtil.isEmpty(origin)) {            return null;        }        StringBuilder sb = new StringBuilder();        for (int i = 0, n = origin.length(); i < n; i++) {            if (i < prefixNoMaskLen) {                sb.append(origin.charAt(i));                continue;            }            if (i > (n - suffixNoMaskLen - 1)) {                sb.append(origin.charAt(i));                continue;            }            sb.append(maskStr);        }        return sb.toString();    }}

這個工具類其實可以自己定,根據自己的業務去擴展Qes28資訊網——每日最新資訊28at.com

注解使用

@Datapublic class People {    private Integer id;    private String name;    private Integer sex;    private Integer age;    @PrivacyEncrypt(type = PrivacyTypeEnum.PHONE) // 隱藏手機號    private String phone;    @PrivacyEncrypt(type = PrivacyTypeEnum.EMAIL) // 隱藏郵箱    private String email;    private String sign;}

到這里,脫敏工作就已經結束了,全局使用這一個注解即可,一勞永逸,支持擴展,測試效果圖如下:Qes28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-73791-0.html輕松實現 SpringBoot 中的隱私數據脫敏處理

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

上一篇: NextTick 在 Vue 中如何發揮作用的?其實大部分人一知半解

下一篇: 做好設計:架構模式

標簽:
  • 熱門焦點
  • 俄羅斯:將審查iPhone等外國公司設備 保數據安全

    iPhone和特斯拉都屬于在各自領域領頭羊的品牌,推出的產品也也都是數一數二的,但對于一些國家而言,它們的產品可靠性和安全性還是在限制范圍內。近日,俄羅斯聯邦通信、信息技術
  • 小米平板5 Pro 12.4簡評:多專多能 兼顧影音娛樂的大屏利器

    疫情帶來了網課,網課盤活了安卓平板,安卓平板市場雖然中途停滯了幾年,但好的一點就是停滯的這幾年行業又有了新的發展方向,例如超窄邊框、高刷新率、多攝鏡頭組合等,這就讓安卓
  • 服務存儲設計模式:Cache-Aside模式

    Cache-Aside模式一種常用的緩存方式,通常是把數據從主存儲加載到KV緩存中,加速后續的訪問。在存在重復度的場景,Cache-Aside可以提升服務性能,降低底層存儲的壓力,缺點是緩存和底
  • 阿里大調整

    來源:產品劉有媒體報道稱,近期淘寶天貓集團啟動了近年來最大的人力制度改革,涉及員工績效、層級體系等多個核心事項,目前已形成一個初步的&ldquo;征求意見版&rdquo;:1、取消P序列
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元&ldquo;人在職場,應該選擇什么樣的著裝?&rdquo;近日,在網絡上,一個與著裝相關的帖子引發關注,在該帖子里,一位在高級寫字樓亞洲金
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯網那些事&ldquo;起猛了,我能看得懂日語了&rdquo;。&ldquo;為什么日本人說話我能聽懂?&rdquo;&ldquo;中文不像中文,日語不像日語,但是我竟然看懂了&rdquo;&hellip;&hell
  • 消息稱小米汽車開始篩選交付中心:需至少120個車位

    IT之家 7 月 7 日消息,日前,有微博簡介為“汽車行業從業者、長三角一體化擁護者”的微博用戶 @長三角行健者 發文表示,據經銷商集團反饋,小米汽車目前
  • 三星推出Galaxy Tab S9系列平板電腦以及Galaxy Watch6系列智能手表

    2023年7月26日,三星電子正式發布了Galaxy Z Flip5與Galaxy Z Fold5。除此之外,Galaxy Tab S9系列平板電腦以及三星Galaxy Watch6系列智能手表也同期
  • iQOO 11S屏幕細節公布:首發三星2K E6全感屏 安卓最好的直屏手機

    日前iQOO手機官方宣布,新一代電競旗艦iQOO 11S將會在7月4日19:00正式與大家見面。隨著發布時間的日益臨近,官方關于該機的預熱也更加密集,截至目前已
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲电影在线看| 国产精品草莓在线免费观看| 国产农村妇女精品一二区| 欧美精品啪啪| 欧美日韩国产黄| 欧美日韩一区二区在线观看 | 国产一区二区三区四区老人| 国产欧美精品日韩区二区麻豆天美| 国产精品一区在线播放| 国产日产精品一区二区三区四区的观看方式| 国产精品中文字幕欧美| 国产一区二区三区在线免费观看| 一区精品在线播放| 亚洲黄一区二区| 一区二区精品在线观看| 亚洲在线不卡| 香蕉久久夜色精品| 久久欧美肥婆一二区| 欧美黄色aaaa| 国产精品国产三级欧美二区| 国产日韩欧美在线视频观看| 亚洲第一主播视频| 亚洲精品乱码| 亚洲欧美不卡| 久久噜噜亚洲综合| 欧美日韩精品在线播放| 国产精品男gay被猛男狂揉视频| 国产视频久久网| 91久久久精品| 亚洲女同精品视频| 久久免费视频在线观看| 欧美理论电影网| 国产精品永久免费| 在线成人免费观看| 亚洲天堂偷拍| 久久五月激情| 欧美视频在线观看一区二区| 国产一区91| 日韩一级欧洲| 久久久91精品国产| 欧美日韩国产丝袜另类| 欧美日韩国产专区| 国产欧美精品国产国产专区| 在线免费观看欧美| 亚洲永久免费精品| 欧美成人官网二区| 国产精品腿扒开做爽爽爽挤奶网站| 伊人久久成人| 亚洲欧美另类久久久精品2019| 久久综合中文| 国产精品无码专区在线观看| 亚洲国产日韩美| 午夜在线a亚洲v天堂网2018| 欧美精品首页| 国内外成人免费激情在线视频| 日韩午夜激情av| 亚洲欧美国产日韩天堂区| 欧美电影电视剧在线观看| 国产欧美日韩91| 日韩亚洲视频| 久久人人爽人人爽| 国产精品一区二区男女羞羞无遮挡| 亚洲激情在线激情| 久久久高清一区二区三区| 国产精品毛片在线| 日韩一区二区免费高清| 久久久久久亚洲精品杨幂换脸| 国产精品chinese| 最新日韩欧美| 久久男人资源视频| 国产欧美日韩综合精品二区| 一本久道久久综合中文字幕| 免费成人av资源网| 国模一区二区三区| 亚洲男人天堂2024| 国产精品jvid在线观看蜜臀| 91久久一区二区| 久久一区二区三区av| 国产一区深夜福利| 亚洲无玛一区| 欧美日韩精品综合在线| 亚洲国产精品第一区二区三区| 香蕉久久夜色精品国产使用方法| 欧美精彩视频一区二区三区| 亚洲全部视频| 欧美—级高清免费播放| 亚洲精品你懂的| 欧美精品乱码久久久久久按摩 | 性欧美18~19sex高清播放| 国产精品入口夜色视频大尺度| 亚洲一区二区三区影院| 国产精品久久久久久久第一福利| 亚洲视频第一页| 国产精品久久精品日日| 亚洲免费综合| 国产亚洲一区在线播放| 久久国产精品99久久久久久老狼| 国产一区二区在线观看免费播放| 久久精品视频99| 在线观看成人av| 欧美成年人视频网站| 亚洲精品男同| 国产精品成人观看视频免费| 亚洲欧美日韩在线一区| 国产精品区一区| 性欧美超级视频| 狠狠干综合网| 欧美顶级少妇做爰| 一本色道久久综合狠狠躁篇怎么玩 | 国产精品一区二区三区观看| 久久激情中文| 亚洲福利久久| 欧美日韩在线视频一区二区| 亚洲欧美另类久久久精品2019| 国产香蕉久久精品综合网| 麻豆精品在线播放| 99热在线精品观看| 国产免费亚洲高清| 久久先锋资源| 99国内精品久久久久久久软件| 国产精品日韩精品| 久久久人成影片一区二区三区观看| 亚洲激情成人网| 欧美系列精品| 久久久久久久久久久成人| 亚洲精品久久久一区二区三区| 国产精品成人一区二区网站软件 | 久久久久久色| 99国产精品久久久| 国产欧美日韩视频在线观看| 久久午夜色播影院免费高清| 亚洲精品欧美激情| 国产精品日韩欧美一区| 久久亚洲风情| 一本高清dvd不卡在线观看| 国产视频在线观看一区| 欧美国产日韩在线| 亚洲欧美欧美一区二区三区| 亚洲国产精彩中文乱码av在线播放| 欧美日韩亚洲一区在线观看| 久久九九热免费视频| 99re66热这里只有精品3直播| 国产日韩欧美麻豆| 欧美老女人xx| 久久99伊人| 日韩一级在线| 韩曰欧美视频免费观看| 欧美日韩在线视频一区| 久久乐国产精品| 亚洲四色影视在线观看| 在线观看成人av| 国产精品爽爽爽| 欧美国产日韩xxxxx| 欧美中文字幕视频| 在线亚洲自拍| 在线精品视频一区二区三四| 国产精品乱看| 欧美激情视频在线播放| 久久精品久久综合| 亚洲少妇在线| 亚洲欧洲日夜超级视频| 国户精品久久久久久久久久久不卡| 欧美三级乱人伦电影| 欧美凹凸一区二区三区视频| 欧美一区二区在线视频| 在线一区视频| 亚洲欧洲一区二区在线播放| 国产一区欧美| 国产精品久久夜| 欧美日韩国产区一| 欧美激情片在线观看| 久久人人爽人人爽| 久久av二区| 亚洲永久免费视频| 一区二区三区精品视频在线观看| 一区二区在线观看视频| 国产欧美日韩视频一区二区三区| 欧美日韩在线精品| 欧美美女操人视频| 欧美国产激情| 另类专区欧美制服同性| 久久精品人人做人人综合| 亚洲欧美在线高清| 亚洲午夜视频在线| 99re8这里有精品热视频免费 | 欧美中文在线观看国产| 亚洲一二区在线| 一本一本大道香蕉久在线精品| 亚洲日本一区二区三区| 在线日韩一区二区| 一区二区在线观看视频在线观看| 国产网站欧美日韩免费精品在线观看| 国产精品久久久久久久久果冻传媒 | 性欧美超级视频| 亚洲综合视频在线| 亚洲先锋成人| 在线性视频日韩欧美| 99国产精品久久久久久久| 亚洲激情六月丁香| 亚洲第一区中文99精品| 在线日韩成人| 亚洲国产精品视频| 亚洲国产精品成人va在线观看| 亚洲国产精品黑人久久久|