logback - カスタム ログの感度を解除するコンポーネント

https://blog.csdn.net/qq_40885085/article/details/113385261?spm=1001.2014.3001.5501

序文

コードを書くときは、大量のロギングコードを書くことになりますが、一部の機密データは安全に感度を解除する必要があります。

ログを匿名化する方法は数多くありますが、一般的な方法は次のとおりです。
① ConvertRule タグを使用し、MessageConverter を継承します。
② ログを印刷するときに特定のフィールドを匿名化するための匿名化ツール クラスを作成します。

どちらの方法にも独自の長所と短所があります。最初の方法はコードの変更が必要であり、開始と終了の原則に従っていません。2 番目の方法では、ネイティブ ログへの侵入を引き起こすために、ログ メソッドのパラメータの感度を解除する必要があります。

カスタム減感作コンポーネント

あるプロジェクトでログを出力するためのコードを大量に書いたが、後から感度を下げる必要が生じ、手動でコードを変更すると非常に時間がかかります。このコンポーネントを導入すると、設定完了後に簡単に感度解除を完了できます。(わずか3ステップで簡単に設定できます。

1. カスタマイズされた減感作コンポーネント - 減感作効果のデモンストレーション

ここに画像の説明を挿入します
ここに画像の説明を挿入します

2. カスタマイズされた減感作コンポーネント - それらの使用方法

1. Jar パッケージの依存関係を導入する

Jarパッケージをローカル倉庫に置くことを前提としており、Jarパッケージのアドレスは以下のとおりです。

<dependency>
    <groupId>pers.liuchengyin</groupId>
    <artifactId>logback-desensitization</artifactId>
    <version>1.0.0</version>
</dependency>

2. ログ ファイル構成クラス (logback.xml) を置き換えます。

ログ出力メソッドを非感作クラスに置き換えるだけで済み、業務上必要ない場合は置き換える必要はありません。

①ConsoleAppender - コンソールの感度を下げる

// 原类
ch.qos.logback.core.ConsoleAppender
// 替换类
pers.liuchengyin.logbackadvice.LcyConsoleAppender

②RollingFileAppender - ローリングファイル

// 原类
ch.qos.logback.core.rolling.RollingFileAppender
// 替换类
pers.liuchengyin.logbackadvice.LcyRollingFileAppender

③FileAppender - ファイル

// 原类
ch.qos.logback.core.rolling.RollingFileAppender
// 替换类
pers.liuchengyin.logbackadvice.LcyRollingFileAppender

交換例:

<property name="CONSOLE_LOG_PATTERN"
          value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>

<!-- ConsoleAppender 控制台输出日志 -->
<appender name="CONSOLE" class="pers.liuchengyin.logbackadvice.LcyConsoleAppender">
    <encoder>
        <pattern>
            ${CONSOLE_LOG_PATTERN}
        </pattern>
    </encoder>
</appender>

3. 感度解除設定ファイル (logback-desensitize.yml) を追加します。

この設定ファイルはリソース ファイルの下に配置する必要があります。

ここに画像の説明を挿入します

3. カスタマイズされた減感作コンポーネント - 減感作仕様

1. サポートするデータ型

8 つの基本タイプとそのパッケージ化タイプ、Map、List、ビジネスの Pojo オブジェクト、List <ビジネスの Pojo オブジェクト>、JSON 文字列。

注: 構成ファイルで構成する場合、オブジェクト内の属性値を構成するだけで済みます。

2. サポートされていないデータ型

非感作化がどのデータソースであるかわからないため、リスト<8 つの基本タイプとパッケージング タイプ>。

3. マッチングルール

キー + 区切り文字 + 値。現在、コロン (:) と等号 (=) のみがサポートされています。例は次のとおりです。

log.info("your email:{}, your phone:{}", "[email protected]","15310763497");
log.info("your email={}, your cellphone={}", "[email protected]","15310763497");
  • key: 異議申し立ての電子メール、電話など、感度を解除する必要がある対応するキーワードと、ビジネス オブジェクトのフィールド、マップのキー、および JSON のキーを定義します。
  • value: 感度を解除する必要がある値 (アピール内の [email protected]、15310763497 など)。

4. ログの仕様 ログを書くときは、できるだけ標準化することをお勧めします. 中国語キーを使用しているものを非感作にする方法はありません. 指定の程度は、非感作効果のデモンストレーションのコードで確認できます。

4. logback-desensitize.yml の設定手順

# 日志脱敏
log-desensitize:
  # 是否忽略大小写匹配,默认为true
  ignore: true
  # 是否开启脱敏,默认为false
  open: true
  # pattern下的key/value为固定脱敏规则
  pattern:
    # 邮箱 - @前第4-7位脱敏
    email: "@>(4,7)"
    # qq邮箱 - @后1-3位脱敏
    qqemail: "@<(1,3)"
    # 姓名 - 姓脱敏,如*杰伦
    name: 1,1
    # 密码 - 所有需要完全脱敏的都可以使用内置的password
    password: password
  patterns:
    # 身份证号,key后面的字段都可以匹配以下规则(用逗号分隔)
    - key: identity,idcard
      # 定义规则的标识
      custom:
        # defaultRegex表示使用组件内置的规则:identity表示身份证号 - 内置的18/15位
        - defaultRegex: identity
          position: 9,13
        # 内置的other表示如果其他规则都无法匹配到,则按该规则处理
        - defaultRegex: other
          position: 9,10
    # 电话号码,key后面的字段都可以匹配以下规则(用逗号分隔)
    - key: phone,cellphone,mobile
      custom:
        # 手机号 - 内置的11位手机匹配规则
        - defaultRegex: phone
          position: 4,7
        # 自定义正则匹配表达式:座机号(带区号,号码七位|八位)
        - customRegex: "^0[0-9]{2,3}-[0-9]{7,8}"
        # -后面的1-4位脱敏
          position: "-<(1,4)"
        # 自定义正则匹配表达式:座机号(不带区号)
        - customRegex: "^[0-9]{7,8}"
          position: 3,5
        # 内置的other表示如果其他规则都无法匹配到,则按该规则处理
        - defaultRegex: other
          position: 1,3
    # 这种方式不太推荐 - 一旦匹配不上,就不会脱敏
    - key: localMobile
      custom:
          customRegex: "^0[0-9]{2,3}-[0-9]{7,8}"
          position: 1,3

上記の構成は比較的完全であるため、階層構成形式に厳密に従う必要があります。

カスタマイズされた減感作サポート方法

1. キー: 値メソッド
電話: 4,7、電話属性の 4 ~ 7 桁が感度が解除されていることを示します
元のデータ: 13610357861
感度解除後: 136****7861

2. シンボルを開始ノードとして使用し、終了ノードを非感作マークとして使用します。
emai: "@>(4,7)"、@ は非感作マーク、> は終了ノードであることを意味し、< は開始ノードであることを意味しますノード。つまり、@> は @ の前に来るものを鈍感にすることを意味し、@< は @ の後に来るものを鈍感にすることを意味します。この例では、@ より前のデータのビット 4 ~ 7 を鈍化します。

注: このルールでは二重引用符と括弧は省略できません。第二に、および = は一致ルールに抵触するため、記号として使用できません。

3. カスタマイズされた定期的な減感作

patterns:
  # 手机号
  - key: phone,mobile
    custom:
      # 手机号的正则
      - customRegex: "^1[0-9]{10}"
        # 脱敏范围
        position: 4,7

CustomRegex: 正規表現。式に一致する場合、対応する感度解除ルール (位置) が使用されます。

4. 1 つのフィールド、複数の値の意味に基づいてカスタマイズされた減感作

たとえば、ユーザー名フィールドの値は携帯電話番号または電子メール アドレスにすることができます。この値は動的に変化するため、前の方法では解決できません。この方法を使用できます。

patterns:
  - key: username
    custom:
      # 手机号 - 11位
      - defaultRegex: phone
        position : 4,7
      # 邮箱 - @
   - defaultRegex: email
     position : "@>(3,12)"
   # 身份证 - 15/18位
   - defaultRegex: identity
     position : 1,3
   # 自定义正则
   - customRegex: "^1[0-9]{10}"
     position : 1,3
   # 都匹配不到时,按照这种规则来
   - defaultRegex: other
     position : 1,3

注: 上記の例の一致ルール内の二重引用符と括弧は省略できません。

このコンポーネントには、携帯電話番号、ID 番号、電子メール、その他 (他に一致するものが見つからない場合に使用) という 4 つの組み込みの一致ルールと、組み込みの感度解除方法であるパスワードがあり、これは完全な感度解除を意味し、パターンの下で使用できます。 。

注: パターンとパターンの下のキーが複製された場合、パターンの下で指定された方法のみが感度解除に使用されます。

JAR パッケージのアドレスとソース コードのアドレス:

https://github.com/liuchengyin01/LogbackDesensitization/tree/master/repo/pers/liuchengyin/logback-desensitization/1.0.0
ここに画像の説明を挿入します
Github アドレス:

https://github.com/liuchengyin01/LogbackDesensitization

Jar パッケージを Maven ローカル ウェアハウスに入力する方法

1. Jar パッケージをダウンロードしてフォルダーに配置します。

2. このフォルダーで cmd を開きます (cmd を開いてこのフォルダーに入ります)

3. コマンドを実行します(前提条件は、Maven 設定が正常であることを確認することです。mvn -v コマンドを使用して正常かどうかを確認します。バージョン番号が表示されていれば、正常であることを意味します)

mvn install:install-file -DgroupId=pers.liuchengyin -DartifactId=logback-desensitization -Dversion=1.0.0 -Dpackaging=jar -Dfile=logback-desensitization-1.0.0.jar

コマンドの説明:

-DgroupId
 表示jar对应的groupId  
 <groupId>pers.liuchengyin</groupId>
-DartifactId:
 表示jar对应的artifactId
 <artifactId>logback-desensitization</artifactId>
-Dversion
 表示jar对应的 version
 <version>1.0.0</version>

おすすめ

転載: blog.csdn.net/weixin_46505978/article/details/128895705