quick-transform
介紹
這是一款基于SpringBoot的返回值數(shù)據(jù)處理組件,主要目的是用于數(shù)據(jù)脫敏等返回數(shù)據(jù)額外處理操作
1.該組件提供默認的注解和對應的處理策略利用AOP,可以便捷的對一些常見敏感數(shù)據(jù)進行數(shù)據(jù)修改操作
2.允許用戶添加自定義的處理策略對方法返回值進行便攜加工
3.項目地址:
碼云: 查看gitee倉庫
github: 查看github倉庫
安裝教程
-
該組件已提交到中央倉庫,直接引入下面依賴即可
<dependency> <groupId>com.github.Silwings-git</groupId> <artifactId>quick-transform-spring-boot-starter</artifactId> <version>1.1.0</version> </dependency>
版本說明
1.1.0
? 新增原始數(shù)據(jù)備份功能查看說明
1.0.1
1.0.0
使用說明
1.核心注解說明
- @MethodTransform
- 添加了該注解的方法會被AOP操作類檢測到,并通過該注解指定的
strategy的實例進行數(shù)據(jù)操作 -
strategy的值必須是實現(xiàn)了TransformStrategy接口的java類,組件中提供了一些常用的實現(xiàn),用戶可以自己定義. - @MethodTransform注解中提供了一個默認值
TransformStrategy.class,即strategy需要實現(xiàn)的接口的class,表示不指定任何操作策略.這種情況下會檢查方法返回值是否包含一個@Transform注解.如果包含,則按照類中屬性上定義的具體注解進行操作 - 如果自己指定
strategy的值,將不理會返回值上可能存在的@Transform注解,而是按照指定的值的實例進行數(shù)據(jù)處理.可以理解為實體類上的@Transform及相關注解配置的策略是默認策略.當不通過@MethodTransform注解指定其他處理策略時會使用默認配置,否則使用指定策略 - 可以通過
execute指定是否需要執(zhí)行,默認為true表示需要執(zhí)行
- 添加了該注解的方法會被AOP操作類檢測到,并通過該注解指定的
- @Transform
- 該注解用于在標記當前實體類存在需要處理的屬性
- 僅僅是作為一個是否需要遍歷類屬性列表的標識,必須與@MethodTransform或@DataTransform配合使用,在只有該注解的情況下不會有任何效果
- 添加該注解的實體類的屬性上可以添加
@DataTransform及其語義化注解,當該注解被應用時,管理器會對類中屬性進行遍歷尋找屬性上包含的@DataTransform注解.
- @DataTransform
- 該注解標記需要進行數(shù)據(jù)處理的屬性或方法返回值
- 和
@MethodTransform一樣,需要且必須指定一個strategy策略來明確數(shù)據(jù)處理邏輯. - 組件中提供了一些常用的該注解的語義化注解,如有需要可以直接使用語義化注解,而不用去自定義處理策略并指定
- 可以通過
execute指定是否需要執(zhí)行,默認為true表示需要執(zhí)行
2.@DataTransform的語義化注解
- @BankCardTransform: 銀行卡處理策略,顯示前 6 位 + *(實際位數(shù)) + 后 4 位,如:622575******1496
- @EmailTransform: 郵箱處理策略,展示首個字符和@符號后面的值
- @FixedPhoneTransform: 固定電話處理策略,固定電話展示后四位
- @IdCardTransform: 身份證處理策略,隱藏出生日期及其前三位
- @NameTransform: 名稱處理策略,展示姓,隱藏其他
- @PasswordTransform: 密碼處理策略,8位數(shù)星號
- @PhoneTransform: 手機號處理策略,隱藏第4-8位,例:138*****245
3.自定義策略
自定義策略需要實現(xiàn)
com.silwings.transform.strategy.TransformStrategy接口該接口包含一個
T transform(T t);抽象方法,其就是真正執(zhí)行數(shù)據(jù)處理的方法.自定義實現(xiàn)類時務必保證該方法的返回值與被指定策略類為當前實現(xiàn)類的方法的返回值類型一致,否則可能發(fā)生類型轉(zhuǎn)換異常.實現(xiàn)類需要添加
@Component注解注入Spring容器才能正常生效.使用時直接指定
strategy為實現(xiàn)類class即可-
示例:
-
自定義實現(xiàn)
import com.silwings.transform.strategy.TransformStrategy; import org.springframework.stereotype.Component; /** * @author CuiYiXiang * @Classname MyStrategy * @Description * @Date 2020/11/8 */ @Component public class MyStrategy implements TransformStrategy<String> { @Override public String transform(String s) { return "自定義字符串" + s; } }
-
-
使用自定義策略
import com.silwings.goods.strategy.MyStrategy; import com.silwings.transform.annotation.DataTransform; import com.silwings.transform.annotation.MethodTransform; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * @author CuiYiXiang * @Classname Demo * @Description * @Date 2020/11/8 */ @RestController public class Demo { @GetMapping("/demo") @MethodTransform(strategy = MyStrategy.class) // @DataTransform(strategy = MyStrategy.class) public String demo() { return "Hello Word"; } }
-
結(jié)果參考
原結(jié)果:Hello Word 現(xiàn)結(jié)果:自定義字符串Hello Word
4.自定義模糊字符
- 組件默認的模糊字符是
*,需要時使用等長度的星號字符串對原數(shù)據(jù)替換 - 該組件支持對該默認字符進行自定義修改,在配置文件配置transform.replaceSymbol即可.接收一個字符串,但只有首個字符會被使用
- 注意:部分字符在Spring中不支持,如&
5.原始數(shù)據(jù)備份(1.1.0版本新增)
- 原始數(shù)據(jù)備份默認是關閉狀態(tài),開啟數(shù)據(jù)備份后,會將數(shù)據(jù)轉(zhuǎn)換之前的原始數(shù)據(jù)備份到線程中(基于ThreadLocal),在之后需要使用原始數(shù)據(jù)時即可通過工具類獲取.
- 開啟方式:
- 全局配置: 在配置文件中添加transform.open-backups,接收布爾類型,true表示開啟全局原始數(shù)據(jù)備份.
- 注解配置: @MethodTransform,@Transform,@DataTransform及其語義化注解中均包含backups字段,默認為FOLLOW,表示跟隨全局配置.如果需要開啟數(shù)據(jù)備份,設置為OPEN.
- 優(yōu)先級說明:
- 注解配置優(yōu)先級高于全局配置,無論全局如何,只要注解上設置為OPEN,就會執(zhí)行原始數(shù)據(jù)備份.注解默認跟隨全局配置
- 與@MethodTransform相同,當原始數(shù)據(jù)是實體類,而方法與實體類同時聲明了備份設置時,是否備份以方法上的配置為準,如果方法沒有配置,才以實體類上的@Transform為準.
- 獲取/刪除備份數(shù)據(jù)
- 數(shù)據(jù)轉(zhuǎn)換后會返回一個增強后的新數(shù)據(jù),需要使用該新數(shù)據(jù)對象來獲取原始數(shù)據(jù)
- 調(diào)用工具類TransformUtils的getBackup(T res)即可獲取原始數(shù)據(jù),res為數(shù)據(jù)轉(zhuǎn)換后獲取到的新數(shù)據(jù)實例
- 調(diào)用工具類TransformUtils的removeBackup(T res)即可刪除指定數(shù)據(jù)的原始數(shù)據(jù),res為數(shù)據(jù)轉(zhuǎn)換后獲取到的新數(shù)據(jù)實例
- 調(diào)用工具類TransformUtils的removeAllBackup()即可刪除全部備份數(shù)據(jù)
- 支持的數(shù)據(jù)類型
- 目前只支持基本數(shù)據(jù)類型(含包裝類),String和實體類實例的數(shù)據(jù)備份,集合數(shù)組等類型暫不支持,如果對這些數(shù)據(jù)類型設置為備份,會在日志提示相關信息,不會導致程序終止,另外也無法獲取到備份數(shù)據(jù)
- 備份數(shù)據(jù)的存儲容器是HashMap,所以當存入相同key時,舊的數(shù)據(jù)會被覆蓋,屆時會有相關日志提示.
- 其他說明
- 數(shù)據(jù)備份是以進入策略類transform(T t)方法的實例為單位的,所以在進行數(shù)據(jù)備份時是將T t進行備份,實體類中字段上聲明的注解的備份配置不會有任何效果
- 推薦使用注解的備份配置而不是全局配置,只在需要使用原始數(shù)據(jù)時才對數(shù)據(jù)進行備份,避免不必要的開銷
- 備份數(shù)據(jù)是存儲于線程中的,如果你的線程是長時間存在不會自動關閉的,可以使用TransformUtils相關的方法刪除數(shù)據(jù),防止出現(xiàn)內(nèi)存溢出問題
后記:
? 非常感謝你能看到這里,希望這個小組件對你有所幫助.非常期待您的評論與反饋