摘要:項目介紹日志脫敏是常見的安全需求。特性基于注解的日志脫敏可以自定義策略實現,策略生效條件常見的脫敏內置方案深拷貝,且原始對象不用實現任何接口。放在集合屬性上,且屬性為普通對象作為演示,集合中為普通的字符串。
項目介紹
日志脫敏是常見的安全需求。普通的基于工具類方法的方式,對代碼的入侵性太強。編寫起來又特別麻煩。
本項目提供基于注解的方式,并且內置了常見的脫敏方式,便于開發。
用戶也可以基于自己的實際需要,自定義注解。
特性基于注解的日志脫敏
可以自定義策略實現,策略生效條件
常見的脫敏內置方案
java 深拷貝,且原始對象不用實現任何接口。
快速開始 maven 導入定義對象com.github.houbb sensitive-core 0.0.2
User.java
我們對 password 使用脫敏,指定脫敏策略為 StrategyPassword。(直接返回 null)
public class User { @Sensitive(strategy = StrategyChineseName.class) private String username; @Sensitive(strategy = StrategyCardId.class) private String idCard; @Sensitive(strategy = StrategyPassword.class) private String password; @Sensitive(strategy = StrategyEmail.class) private String email; @Sensitive(strategy = StrategyPhone.class) private String phone; //Getter & Setter //toString() }屬性為集合或者對象
如果某個屬性是單個集合或者對象,則需要使用注解 @SensitiveEntry。
放在集合屬性上,且屬性為普通對象
會遍歷每一個屬性,執行上面的脫敏策略。
放在對象屬性上
會處理對象中各個字段上的脫敏注解信息。
放在集合屬性上,且屬性為對象
遍歷每一個對象,處理對象中各個字段上的脫敏注解信息。
放在集合屬性上,且屬性為普通對象UserEntryBaseType.java
作為演示,集合中為普通的字符串。
public class UserEntryBaseType { @SensitiveEntry @Sensitive(strategy = StrategyChineseName.class) private ListchineseNameList; @SensitiveEntry @Sensitive(strategy = StrategyChineseName.class) private String[] chineseNameArray; //Getter & Setter & toString() }
構建對象
/** * 構建用戶-屬性為列表,列表中為基礎屬性 * @return 構建嵌套信息 * @since 0.0.2 */ public static UserEntryBaseType buildUserEntryBaseType() { UserEntryBaseType userEntryBaseType = new UserEntryBaseType(); userEntryBaseType.setChineseNameList(Arrays.asList("盤古", "女媧", "伏羲")); userEntryBaseType.setChineseNameArray(new String[]{"盤古", "女媧", "伏羲"}); return userEntryBaseType; }
測試演示
/** * 用戶屬性中有集合或者map,集合中屬性是基礎類型-脫敏測試 * @since 0.0.2 */ @Test public void sensitiveEntryBaseTypeTest() { UserEntryBaseType userEntryBaseType = DataPrepareTest.buildUserEntryBaseType(); System.out.println("脫敏前原始: " + userEntryBaseType); UserEntryBaseType sensitive = SensitiveUtil.desCopy(userEntryBaseType); System.out.println("脫敏對象: " + sensitive); System.out.println("脫敏后原始: " + userEntryBaseType); }
日志信息
脫敏前原始: UserEntryBaseType{chineseNameList=[盤古, 女媧, 伏羲], chineseNameArray=[盤古, 女媧, 伏羲]} 脫敏對象: UserEntryBaseType{chineseNameList=[*古, *媧, *羲], chineseNameArray=[*古, *媧, *羲]} 脫敏后原始: UserEntryBaseType{chineseNameList=[盤古, 女媧, 伏羲], chineseNameArray=[盤古, 女媧, 伏羲]}放在對象屬性上
演示對象
這里的 User 和上面的 User 對象一致。
public class UserEntryObject { @SensitiveEntry private User user; @SensitiveEntry private ListuserList; @SensitiveEntry private User[] userArray; //... }
對象構建
/** * 構建用戶-屬性為列表,數組。列表中為對象。 * @return 構建嵌套信息 * @since 0.0.2 */ public static UserEntryObject buildUserEntryObject() { UserEntryObject userEntryObject = new UserEntryObject(); User user = buildUser(); User user2 = buildUser(); User user3 = buildUser(); userEntryObject.setUser(user); userEntryObject.setUserList(Arrays.asList(user2)); userEntryObject.setUserArray(new User[]{user3}); return userEntryObject; }
測試演示
/** * 用戶屬性中有集合或者對象,集合中屬性是對象-脫敏測試 * @since 0.0.2 */ @Test public void sensitiveEntryObjectTest() { UserEntryObject userEntryObject = DataPrepareTest.buildUserEntryObject(); System.out.println("脫敏前原始: " + userEntryObject); UserEntryObject sensitiveUserEntryObject = SensitiveUtil.desCopy(userEntryObject); System.out.println("脫敏對象: " + sensitiveUserEntryObject); System.out.println("脫敏后原始: " + userEntryObject); }
測試結果
脫敏前原始: UserEntryObject{user=User{username="脫敏君", idCard="123456190001011234", password="1234567", email="12345@qq.com", phone="18888888888"}, userList=[User{username="脫敏君", idCard="123456190001011234", password="1234567", email="12345@qq.com", phone="18888888888"}], userArray=[User{username="脫敏君", idCard="123456190001011234", password="1234567", email="12345@qq.com", phone="18888888888"}]} 脫敏對象: UserEntryObject{user=User{username="脫*君", idCard="123456**********34", password="null", email="123**@qq.com", phone="188****8888"}, userList=[User{username="脫*君", idCard="123456**********34", password="null", email="123**@qq.com", phone="188****8888"}], userArray=[User{username="脫*君", idCard="123456**********34", password="null", email="123**@qq.com", phone="188****8888"}]} 脫敏后原始: UserEntryObject{user=User{username="脫敏君", idCard="123456190001011234", password="1234567", email="12345@qq.com", phone="18888888888"}, userList=[User{username="脫敏君", idCard="123456190001011234", password="1234567", email="12345@qq.com", phone="18888888888"}], userArray=[User{username="脫敏君", idCard="123456190001011234", password="1234567", email="12345@qq.com", phone="18888888888"}]}需求 & BUGS
issues歡迎加入開發
如果你對本項目有興趣,并且對代碼有一定追求,可以申請加入本項目開發。
如果你善于寫文檔,或者愿意補全測試案例,也非常歡迎加入。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/72939.html
摘要:項目介紹日志脫敏是常見的安全需求。常見的脫敏內置方案。支持用戶自定義注解。自定義注解導入自定義注解新增功能。策略優先級優先生效,然后是系統內置注解,最后是用戶自定義注解。讓這些的密碼不進行脫敏定義測試對象定義一個使用自定義注解的對象。 項目介紹 日志脫敏是常見的安全需求。普通的基于工具類方法的方式,對代碼的入侵性太強。編寫起來又特別麻煩。 本項目提供基于注解的方式,并且內置了常見的脫敏...
摘要:年月底,阿里巴巴集團發布了阿里巴巴開發手冊終極版,年月日,在杭州云棲大會上,代碼規約插件全球首發,插件支持以上版本和以上版本。阿里巴巴代碼規約插件安裝阿里代碼規約插件有插件和插件。 2017年9月底,阿里巴巴集團發布了《阿里巴巴Java開發手冊》PDF終極版,2017年10月14日,在2017杭州云棲大會上,Java代碼規約插件全球首發,p3c-pmd插件支持Eclipse4.2以上版...
摘要:接下來我們以余額寶為例,重點剖析天弘基金在日志數據分析領域是如何突破的此前,天弘基金一直使用開源的日志方案,研發和運維人員通過對日志數據進行處理,使用日志文件進行查詢檢索。 雙十一剛剛結束,其實最緊張的不是商鋪理貨,也不是網友緊盯大促商品準備秒殺,而是網購幕后的運維人員,他們最擔心:什么網絡中斷、應用卡頓、響應速度慢,服務器宕機……雙十一作為電商 IT 部門的頭等大事,大促前,運維人員就需要...
閱讀 590·2023-04-26 01:42
閱讀 3227·2021-11-22 11:56
閱讀 2404·2021-10-08 10:04
閱讀 848·2021-09-24 10:37
閱讀 3131·2019-08-30 15:52
閱讀 1752·2019-08-29 13:44
閱讀 477·2019-08-28 17:51
閱讀 2149·2019-08-26 18:26