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 を鈍化します。
注: このルールでは二重引用符と括弧は省略できません。第二に、および = は一致ルールに抵触するため、記号として使用できません。
- 元のデータ: [email protected]
- "@>(4,7)" 減感後: 123****[email protected]
- "@<(1,3)" 減感後: 123456789@***com
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>