介紹
我們可以通過實現自定義日志附加程序并使用正則表達式來識別和屏蔽敏感信息,從而屏蔽 Spring Boot 應用程序的 log4j 日志中的敏感數據。以下是具體方法實戰:
基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
- 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
- 視頻教程:https://doc.iocoder.cn/video/
第1步:創建自定義日志 Appender
創建一個擴展 log4j 提供的 AppenderSkeleton
的類。這個自定義appender將在日志消息寫入日志之前攔截它們,并應用必要的屏蔽。
importorg.apache.log4j.AppenderSkeleton;
importorg.apache.log4j.spi.LoggingEvent;
publicclassMaskingAppenderextendsAppenderSkeleton{
@Override
protectedvoidappend(LoggingEventloggingEvent){
Stringmessage=loggingEvent.getMessage().toString();
StringmaskedMessage=maskSensitiveData(message);
loggingEvent.setMessage(maskedMessage);
super.append(loggingEvent);
}
@Override
publicvoidclose(){
//Cleanupresources,ifany
}
@Override
publicbooleanrequiresLayout(){
returnfalse;
}
privateStringmaskSensitiveData(Stringmessage){
//Implementyourlogictomasksensitivedatausingregularexpressions
//Fordemonstrationpurposes,let'sassumewewanttomaskcreditcardnumbers
returnmessage.replaceAll("\d{4}-\d{4}-\d{4}-\d{4}","****-****-****-****");
}
}
log4j中的一個appender負責將日志消息寫入各種輸出中。通過擴展AppenderSkeleton
類,我們創建了一個自定義appender,它可以在將日志消息寫入日志之前對其進行修改。
正則表達式(regex)是用于模式匹配和操作字符串的強大模式。在maskSensitiveData()
方法中,我們使用regex來識別和替換敏感數據。在示例中,我們使用模式\d{4}-\d{4}-\d{4}-\d{4}
匹配格式為“xxxx-xxxx
”的信用卡號,并將其替換為“-
”。
append()方法
log4j在準備添加日志消息時調用此方法。在MaskingAppender
類中,我們覆蓋這個方法來攔截日志消息,使用maskSensitiveData()
方法對敏感數據應用masking,然后將修改后的消息傳遞給超類的append()
方法。
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
第2步:配置Log4j
在 Spring Boot 應用程序的配置文件中,我們需要配置 log4j 以使用自定義 Appender。我們還需要根據您的要求指定日志級別和其他設置。這是使用 application.properties 配置 log4j 的示例:
#Log4jconfiguration
log4j.rootLogger=INFO,maskedAppender
log4j.appender.maskedAppender=com.example.MaskingAppender
log4j.appender.maskedAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.maskedAppender.layout.ConversionPattern=%d[%t]%-5p%c-%m%n
第3步:包含 Log4j
確保在Spring Boot應用的構建文件中有必要的log4j依賴項(例如,Maven的pom.xml):
log4j
log4j
1.2.17
第4步::測試日志屏蔽
現在,當我們在 Spring Boot 應用程序中使用 log4j 記錄消息時,敏感數據將被自動屏蔽。例如:
importorg.apache.log4j.Logger;
publicclassSomeService{
privatestaticfinalLoggerlogger=Logger.getLogger(SomeService.class);
publicvoidprocessSensitiveData(Stringdata){
logger.info("Processingsensitivedata:"+data);//Sensitivedatawillbemaskedinthelogs
}
}
在應用程序代碼中,可以使用log4j提供的Logger來記錄消息。在本例中,我們使用logger.info()
記錄一條消息。包含敏感數據的日志消息作為字符串連接傳遞。MaskingAppender攔截此消息并在將其寫入日志之前應用掩碼。
在上面的例子中,如果數據參數中包含類似“1234—5678—9012—3456
”的信用卡號,那么它將在日志輸出中被屏蔽為“正在處理敏感數據:——
”
結論
通過遵循這些步驟和概念,可以有效地屏蔽Spring Boot應用程序log4j日志中的敏感數據。請記住根據我們的特定需求和敏感數據模式調整maskSensitiveData()
方法中的掩碼邏輯。
-
字符串
+關注
關注
1文章
577瀏覽量
20485 -
應用程序
+關注
關注
37文章
3240瀏覽量
57600 -
掩碼
+關注
關注
0文章
3瀏覽量
1214
原文標題:保護 Log4j 日志中的敏感數據,兩步搞定!
文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論