摘要:項(xiàng)目介紹日志脫敏是常見(jiàn)的安全需求。常見(jiàn)的脫敏內(nèi)置方案。支持用戶自定義注解。自定義注解導(dǎo)入自定義注解新增功能。策略優(yōu)先級(jí)優(yōu)先生效,然后是系統(tǒng)內(nèi)置注解,最后是用戶自定義注解。讓這些的密碼不進(jìn)行脫敏定義測(cè)試對(duì)象定義一個(gè)使用自定義注解的對(duì)象。
項(xiàng)目介紹
日志脫敏是常見(jiàn)的安全需求。普通的基于工具類方法的方式,對(duì)代碼的入侵性太強(qiáng)。編寫起來(lái)又特別麻煩。
本項(xiàng)目提供基于注解的方式,并且內(nèi)置了常見(jiàn)的脫敏方式,便于開(kāi)發(fā)。
特性基于注解的日志脫敏。
可以自定義策略實(shí)現(xiàn),策略生效條件。
常見(jiàn)的脫敏內(nèi)置方案。
java 深拷貝,且原始對(duì)象不用實(shí)現(xiàn)任何接口。
支持用戶自定義注解。
自定義注解 maven 導(dǎo)入自定義注解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 策略多帶帶使用的時(shí)候,默認(rèn)是生效的。
如果有 @SensitiveCondition 注解,則只有當(dāng)條件滿足時(shí),才會(huì)執(zhí)行脫敏策略。
@SensitiveCondition 只會(huì)對(duì)系統(tǒng)內(nèi)置注解和自定義注解生效,因?yàn)?@Sensitive 有屬于自己的策略生效條件。
策略優(yōu)先級(jí)
@Sensitive 優(yōu)先生效,然后是系統(tǒng)內(nèi)置注解,最后是用戶自定義注解。
對(duì)應(yīng)的實(shí)現(xiàn)兩個(gè)元注解 @SensitiveStrategy、@SensitiveCondition 分別指定了對(duì)應(yīng)的實(shí)現(xiàn)。
CustomPasswordStrategy.java
public class CustomPasswordStrategy implements IStrategy { @Override public Object des(Object original, IContext context) { return "**********************"; } }
ConditionFooPassword.java
/** * 讓這些 123456 的密碼不進(jìn)行脫敏 * @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); } } }定義測(cè)試對(duì)象
定義一個(gè)使用自定義注解的對(duì)象。
public class CustomPasswordModel { @SensitiveCustomPasswordCondition @SensitiveCustomPasswordStrategy private String password; @SensitiveCustomPasswordCondition @SensitiveStrategyPassword private String fooPassword; //其他方法 }測(cè)試
/** * 自定義注解測(cè)試 */ @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()); }
構(gòu)建對(duì)象的方法如下:
/** * 構(gòu)建自定義密碼對(duì)象 * @return 對(duì)象 */ private CustomPasswordModel buildCustomPasswordModel(){ CustomPasswordModel model = new CustomPasswordModel(); model.setPassword("hello"); model.setFooPassword("123456"); return model; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73063.html
摘要:項(xiàng)目介紹日志脫敏是常見(jiàn)的安全需求。特性基于注解的日志脫敏可以自定義策略實(shí)現(xiàn),策略生效條件常見(jiàn)的脫敏內(nèi)置方案深拷貝,且原始對(duì)象不用實(shí)現(xiàn)任何接口。放在集合屬性上,且屬性為普通對(duì)象作為演示,集合中為普通的字符串。 項(xiàng)目介紹 日志脫敏是常見(jiàn)的安全需求。普通的基于工具類方法的方式,對(duì)代碼的入侵性太強(qiáng)。編寫起來(lái)又特別麻煩。 本項(xiàng)目提供基于注解的方式,并且內(nèi)置了常見(jiàn)的脫敏方式,便于開(kāi)發(fā)。 用戶也可以...
摘要:注解有以下幾個(gè)知識(shí)點(diǎn)元數(shù)據(jù)注解的分類內(nèi)置注解自定義注解注解處理器本文先介紹前面?zhèn)€知識(shí)點(diǎn)元數(shù)據(jù)注解的分類內(nèi)置注解自定義注解。注解相當(dāng)于是一種嵌入在程序中的元數(shù)據(jù),可以使用注解解析工具或編譯器對(duì)其進(jìn)行解析,也可以指定注解在編譯期或運(yùn)行期有效。 大家好,我是樂(lè)字節(jié)的小樂(lè),上次說(shuō)過(guò)了Java多態(tài)的6大特性|樂(lè)字節(jié),接下來(lái)我們來(lái)看看Java編程里的注解。showImg(https://segme...
摘要:中的詳解必修個(gè)多線程問(wèn)題總結(jié)個(gè)多線程問(wèn)題總結(jié)有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升開(kāi)源的運(yùn)行原理從虛擬機(jī)工作流程看運(yùn)行原理。 自己實(shí)現(xiàn)集合框架 (三): 單鏈表的實(shí)現(xiàn) 自己實(shí)現(xiàn)集合框架 (三): 單鏈表的實(shí)現(xiàn) 基于 POI 封裝 ExcelUtil 精簡(jiǎn)的 Excel 導(dǎo)入導(dǎo)出 由于 poi 本身只是針對(duì)于 ...
摘要:特性支持過(guò)程式編程基于字節(jié)碼的代理重試基于注解的重試,允許自定義注解無(wú)縫接入接口與注解的統(tǒng)一解決與中的不足之處設(shè)計(jì)目的綜合了和的優(yōu)勢(shì)?;谧止?jié)碼實(shí)現(xiàn)的代理重試,可以不依賴。提供基于代碼模式字節(jié)碼增強(qiáng)實(shí)現(xiàn)的方式。 Sisyphus 支持過(guò)程式編程和注解編程的 java 重試框架。 特性 支持 fluent 過(guò)程式編程 基于字節(jié)碼的代理重試 基于注解的重試,允許自定義注解 無(wú)縫接入 sp...
摘要:我自己總結(jié)的學(xué)習(xí)的系統(tǒng)知識(shí)點(diǎn)以及面試問(wèn)題,已經(jīng)開(kāi)源,目前已經(jīng)。目前最新的版本中模塊的組件已經(jīng)被廢棄掉,同時(shí)增加了用于異步響應(yīng)式處理的組件。每一次請(qǐng)求都會(huì)產(chǎn)生一個(gè)新的,該僅在當(dāng)前內(nèi)有效。顯而易見(jiàn),這種模式存在很多問(wèn)題。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識(shí)點(diǎn)以及面試問(wèn)題,已經(jīng)開(kāi)源,目前已經(jīng) 41k+ Star。會(huì)一直完善下去,歡迎建議和指導(dǎo),同時(shí)也歡迎Star: https://githu...
閱讀 3113·2023-04-26 00:49
閱讀 3764·2021-09-29 09:45
閱讀 1066·2019-08-29 18:47
閱讀 2778·2019-08-29 18:37
閱讀 2758·2019-08-29 16:37
閱讀 3323·2019-08-29 13:24
閱讀 1806·2019-08-27 10:56
閱讀 2381·2019-08-26 11:42