摘要:項目介紹日志脫敏是常見的安全需求。常見的脫敏內置方案。支持用戶自定義注解。自定義注解導入自定義注解新增功能。策略優先級優先生效,然后是系統內置注解,最后是用戶自定義注解。讓這些的密碼不進行脫敏定義測試對象定義一個使用自定義注解的對象。
項目介紹
日志脫敏是常見的安全需求。普通的基于工具類方法的方式,對代碼的入侵性太強。編寫起來又特別麻煩。
本項目提供基于注解的方式,并且內置了常見的脫敏方式,便于開發。
特性基于注解的日志脫敏。
可以自定義策略實現,策略生效條件。
常見的脫敏內置方案。
java 深拷貝,且原始對象不用實現任何接口。
支持用戶自定義注解。
自定義注解 maven 導入自定義注解com.github.houbb sensitive-core 0.0.4
v0.0.4 新增功能。允許功能自定義條件注解和策略注解。
案例 自定義注解策略脫敏
/** * 自定義密碼脫敏策略 * @author binbin.hou * date 2019/1/17 * @since 0.0.4 */ @Inherited @Documented @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @SensitiveStrategy(CustomPasswordStrategy.class) public @interface SensitiveCustomPasswordStrategy { }
脫敏生效條件
/** * 自定義密碼脫敏策略生效條件 * @author binbin.hou * date 2019/1/17 * @since 0.0.4 */ @Inherited @Documented @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @SensitiveCondition(ConditionFooPassword.class) public @interface SensitiveCustomPasswordCondition{ }
TIPS
@SensitiveStrategy 策略多帶帶使用的時候,默認是生效的。
如果有 @SensitiveCondition 注解,則只有當條件滿足時,才會執行脫敏策略。
@SensitiveCondition 只會對系統內置注解和自定義注解生效,因為 @Sensitive 有屬于自己的策略生效條件。
策略優先級
@Sensitive 優先生效,然后是系統內置注解,最后是用戶自定義注解。
對應的實現兩個元注解 @SensitiveStrategy、@SensitiveCondition 分別指定了對應的實現。
CustomPasswordStrategy.java
public class CustomPasswordStrategy implements IStrategy { @Override public Object des(Object original, IContext context) { return "**********************"; } }
ConditionFooPassword.java
/** * 讓這些 123456 的密碼不進行脫敏 * @author binbin.hou * date 2019/1/2 * @since 0.0.1 */ public class ConditionFooPassword implements ICondition { @Override public boolean valid(IContext context) { try { Field field = context.getCurrentField(); final Object currentObj = context.getCurrentObject(); final String name = (String) field.get(currentObj); return !name.equals("123456"); } catch (IllegalAccessException e) { throw new RuntimeException(e); } } }定義測試對象
定義一個使用自定義注解的對象。
public class CustomPasswordModel { @SensitiveCustomPasswordCondition @SensitiveCustomPasswordStrategy private String password; @SensitiveCustomPasswordCondition @SensitiveStrategyPassword private String fooPassword; //其他方法 }測試
/** * 自定義注解測試 */ @Test public void customAnnotationTest() { final String originalStr = "CustomPasswordModel{password="hello", fooPassword="123456"}"; final String sensitiveStr = "CustomPasswordModel{password="**********************", fooPassword="123456"}"; CustomPasswordModel model = buildCustomPasswordModel(); Assert.assertEquals(originalStr, model.toString()); CustomPasswordModel sensitive = SensitiveUtil.desCopy(model); Assert.assertEquals(sensitiveStr, sensitive.toString()); Assert.assertEquals(originalStr, model.toString()); }
構建對象的方法如下:
/** * 構建自定義密碼對象 * @return 對象 */ private CustomPasswordModel buildCustomPasswordModel(){ CustomPasswordModel model = new CustomPasswordModel(); model.setPassword("hello"); model.setFooPassword("123456"); return model; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/73063.html
摘要:項目介紹日志脫敏是常見的安全需求。特性基于注解的日志脫敏可以自定義策略實現,策略生效條件常見的脫敏內置方案深拷貝,且原始對象不用實現任何接口。放在集合屬性上,且屬性為普通對象作為演示,集合中為普通的字符串。 項目介紹 日志脫敏是常見的安全需求。普通的基于工具類方法的方式,對代碼的入侵性太強。編寫起來又特別麻煩。 本項目提供基于注解的方式,并且內置了常見的脫敏方式,便于開發。 用戶也可以...
摘要:注解有以下幾個知識點元數據注解的分類內置注解自定義注解注解處理器本文先介紹前面個知識點元數據注解的分類內置注解自定義注解。注解相當于是一種嵌入在程序中的元數據,可以使用注解解析工具或編譯器對其進行解析,也可以指定注解在編譯期或運行期有效。 大家好,我是樂字節的小樂,上次說過了Java多態的6大特性|樂字節,接下來我們來看看Java編程里的注解。showImg(https://segme...
摘要:特性支持過程式編程基于字節碼的代理重試基于注解的重試,允許自定義注解無縫接入接口與注解的統一解決與中的不足之處設計目的綜合了和的優勢。基于字節碼實現的代理重試,可以不依賴。提供基于代碼模式字節碼增強實現的方式。 Sisyphus 支持過程式編程和注解編程的 java 重試框架。 特性 支持 fluent 過程式編程 基于字節碼的代理重試 基于注解的重試,允許自定義注解 無縫接入 sp...
摘要:我自己總結的學習的系統知識點以及面試問題,已經開源,目前已經。目前最新的版本中模塊的組件已經被廢棄掉,同時增加了用于異步響應式處理的組件。每一次請求都會產生一個新的,該僅在當前內有效。顯而易見,這種模式存在很多問題。 我自己總結的Java學習的系統知識點以及面試問題,已經開源,目前已經 41k+ Star。會一直完善下去,歡迎建議和指導,同時也歡迎Star: https://githu...
閱讀 3066·2023-04-26 00:49
閱讀 3729·2021-09-29 09:45
閱讀 995·2019-08-29 18:47
閱讀 2751·2019-08-29 18:37
閱讀 2734·2019-08-29 16:37
閱讀 3300·2019-08-29 13:24
閱讀 1782·2019-08-27 10:56
閱讀 2352·2019-08-26 11:42