基于Spring AOP的Java數(shù)據(jù)脫敏組件quick-transform-spring-boot-starter

quick-transform

介紹

這是一款基于SpringBoot的返回值數(shù)據(jù)處理組件,主要目的是用于數(shù)據(jù)脫敏等返回數(shù)據(jù)額外處理操作
1.該組件提供默認的注解和對應的處理策略利用AOP,可以便捷的對一些常見敏感數(shù)據(jù)進行數(shù)據(jù)修改操作

2.允許用戶添加自定義的處理策略對方法返回值進行便攜加工

3.項目地址:
碼云: 查看gitee倉庫
github: 查看github倉庫

安裝教程

  1. 該組件已提交到中央倉庫,直接引入下面依賴即可

    <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.核心注解說明
  1. @MethodTransform
    1. 添加了該注解的方法會被AOP操作類檢測到,并通過該注解指定的strategy的實例進行數(shù)據(jù)操作
    2. strategy的值必須是實現(xiàn)了TransformStrategy接口的java類,組件中提供了一些常用的實現(xiàn),用戶可以自己定義.
    3. @MethodTransform注解中提供了一個默認值TransformStrategy.class,即strategy需要實現(xiàn)的接口的class,表示不指定任何操作策略.這種情況下會檢查方法返回值是否包含一個@Transform注解.如果包含,則按照類中屬性上定義的具體注解進行操作
    4. 如果自己指定strategy的值,將不理會返回值上可能存在的@Transform注解,而是按照指定的值的實例進行數(shù)據(jù)處理.可以理解為實體類上的@Transform及相關注解配置的策略是默認策略.當不通過@MethodTransform注解指定其他處理策略時會使用默認配置,否則使用指定策略
    5. 可以通過execute指定是否需要執(zhí)行,默認為true表示需要執(zhí)行
  2. @Transform
    1. 該注解用于在標記當前實體類存在需要處理的屬性
    2. 僅僅是作為一個是否需要遍歷類屬性列表的標識,必須與@MethodTransform或@DataTransform配合使用,在只有該注解的情況下不會有任何效果
    3. 添加該注解的實體類的屬性上可以添加@DataTransform及其語義化注解,當該注解被應用時,管理器會對類中屬性進行遍歷尋找屬性上包含的@DataTransform注解.
  3. @DataTransform
    1. 該注解標記需要進行數(shù)據(jù)處理的屬性或方法返回值
    2. @MethodTransform一樣,需要且必須指定一個strategy策略來明確數(shù)據(jù)處理邏輯.
    3. 組件中提供了一些常用的該注解的語義化注解,如有需要可以直接使用語義化注解,而不用去自定義處理策略并指定
    4. 可以通過execute指定是否需要執(zhí)行,默認為true表示需要執(zhí)行
2.@DataTransform的語義化注解
  1. @BankCardTransform: 銀行卡處理策略,顯示前 6 位 + *(實際位數(shù)) + 后 4 位,如:622575******1496
  2. @EmailTransform: 郵箱處理策略,展示首個字符和@符號后面的值
  3. @FixedPhoneTransform: 固定電話處理策略,固定電話展示后四位
  4. @IdCardTransform: 身份證處理策略,隱藏出生日期及其前三位
  5. @NameTransform: 名稱處理策略,展示姓,隱藏其他
  6. @PasswordTransform: 密碼處理策略,8位數(shù)星號
  7. @PhoneTransform: 手機號處理策略,隱藏第4-8位,例:138*****245
3.自定義策略
  1. 自定義策略需要實現(xiàn)com.silwings.transform.strategy.TransformStrategy接口

  2. 該接口包含一個T transform(T t);抽象方法,其就是真正執(zhí)行數(shù)據(jù)處理的方法.自定義實現(xiàn)類時務必保證該方法的返回值與被指定策略類為當前實現(xiàn)類的方法的返回值類型一致,否則可能發(fā)生類型轉(zhuǎn)換異常.

  3. 實現(xiàn)類需要添加@Component注解注入Spring容器才能正常生效.

  4. 使用時直接指定strategy為實現(xiàn)類class即可

  5. 示例:

    1. 自定義實現(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;
          }
      }
      
  1. 使用自定義策略

    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";
        }
    
    }
    
  1. 結(jié)果參考

    原結(jié)果:Hello Word
    現(xiàn)結(jié)果:自定義字符串Hello Word 
    
4.自定義模糊字符
  1. 組件默認的模糊字符是*,需要時使用等長度的星號字符串對原數(shù)據(jù)替換
  2. 該組件支持對該默認字符進行自定義修改,在配置文件配置transform.replaceSymbol即可.接收一個字符串,但只有首個字符會被使用
  3. 注意:部分字符在Spring中不支持,如&
5.原始數(shù)據(jù)備份(1.1.0版本新增)
  1. 原始數(shù)據(jù)備份默認是關閉狀態(tài),開啟數(shù)據(jù)備份后,會將數(shù)據(jù)轉(zhuǎn)換之前的原始數(shù)據(jù)備份到線程中(基于ThreadLocal),在之后需要使用原始數(shù)據(jù)時即可通過工具類獲取.
  2. 開啟方式:
    1. 全局配置: 在配置文件中添加transform.open-backups,接收布爾類型,true表示開啟全局原始數(shù)據(jù)備份.
    2. 注解配置: @MethodTransform,@Transform,@DataTransform及其語義化注解中均包含backups字段,默認為FOLLOW,表示跟隨全局配置.如果需要開啟數(shù)據(jù)備份,設置為OPEN.
    3. 優(yōu)先級說明:
      1. 注解配置優(yōu)先級高于全局配置,無論全局如何,只要注解上設置為OPEN,就會執(zhí)行原始數(shù)據(jù)備份.注解默認跟隨全局配置
      2. 與@MethodTransform相同,當原始數(shù)據(jù)是實體類,而方法與實體類同時聲明了備份設置時,是否備份以方法上的配置為準,如果方法沒有配置,才以實體類上的@Transform為準.
  3. 獲取/刪除備份數(shù)據(jù)
    1. 數(shù)據(jù)轉(zhuǎn)換后會返回一個增強后的新數(shù)據(jù),需要使用該新數(shù)據(jù)對象來獲取原始數(shù)據(jù)
    2. 調(diào)用工具類TransformUtils的getBackup(T res)即可獲取原始數(shù)據(jù),res為數(shù)據(jù)轉(zhuǎn)換后獲取到的新數(shù)據(jù)實例
    3. 調(diào)用工具類TransformUtils的removeBackup(T res)即可刪除指定數(shù)據(jù)的原始數(shù)據(jù),res為數(shù)據(jù)轉(zhuǎn)換后獲取到的新數(shù)據(jù)實例
    4. 調(diào)用工具類TransformUtils的removeAllBackup()即可刪除全部備份數(shù)據(jù)
  4. 支持的數(shù)據(jù)類型
    1. 目前只支持基本數(shù)據(jù)類型(含包裝類),String和實體類實例的數(shù)據(jù)備份,集合數(shù)組等類型暫不支持,如果對這些數(shù)據(jù)類型設置為備份,會在日志提示相關信息,不會導致程序終止,另外也無法獲取到備份數(shù)據(jù)
    2. 備份數(shù)據(jù)的存儲容器是HashMap,所以當存入相同key時,舊的數(shù)據(jù)會被覆蓋,屆時會有相關日志提示.
  5. 其他說明
    1. 數(shù)據(jù)備份是以進入策略類transform(T t)方法的實例為單位的,所以在進行數(shù)據(jù)備份時是將T t進行備份,實體類中字段上聲明的注解的備份配置不會有任何效果
    2. 推薦使用注解的備份配置而不是全局配置,只在需要使用原始數(shù)據(jù)時才對數(shù)據(jù)進行備份,避免不必要的開銷
    3. 備份數(shù)據(jù)是存儲于線程中的,如果你的線程是長時間存在不會自動關閉的,可以使用TransformUtils相關的方法刪除數(shù)據(jù),防止出現(xiàn)內(nèi)存溢出問題

后記:

? 非常感謝你能看到這里,希望這個小組件對你有所幫助.非常期待您的評論與反饋

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容