如何使用slf4j框架实现敏感数据的屏蔽? [英] How masking of sensitive data is achieved using slf4j framework?
本文介绍了如何使用slf4j框架实现敏感数据的屏蔽?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想使用slf4j框架屏蔽用户名/密码等敏感数据。我们非常感谢您的即时帮助。提前谢谢。
推荐答案
试试这个。 1.首先,我们应该创建一个类来处理我们的日志(每行)
public class PatternMaskingLayout extends PatternLayout {
private Pattern multilinePattern;
private List<String> maskPatterns = new ArrayList<>();
public void addMaskPattern(String maskPattern) { // invoked for every single entry in the xml
maskPatterns.add(maskPattern);
multilinePattern = Pattern.compile(
String.join("|", maskPatterns), // build pattern using logical OR
Pattern.MULTILINE
);
}
@Override
public String doLayout(ILoggingEvent event) {
return maskMessage(super.doLayout(event)); // calling superclass method is required
}
private String maskMessage(String message) {
if (multilinePattern == null) {
return message;
}
StringBuilder sb = new StringBuilder(message);
Matcher matcher = multilinePattern.matcher(sb);
while (matcher.find()) {
if (matcher.group().contains("creditCard")) {
maskCreditCard(sb, matcher);
} else if (matcher.group().contains("email")) {
// your logic for this case
}
}
return sb.toString();
}
private void maskCreditCard(StringBuilder sb, Matcher matcher) {
//here is our main logic for masking sensitive data
String targetExpression = matcher.group();
String[] split = targetExpression.split("=");
String pan = split[1];
String maskedPan = Utils.getMaskedPan(pan);
int start = matcher.start() + split[0].length() + 1;
int end = matcher.end();
sb.replace(start, end, maskedPan);
}
}
第二步是我们应该为Logback登录到logback.xml创建附加器
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <layout class="com.bpcbt.micro.utils.PatternMaskingLayout"> <maskPattern>creditCard=d+</maskPattern> <!-- SourcePan pattern --> <pattern>%d{dd/MM/yyyy HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n%ex</pattern>--> </layout> </encoder>
现在我们可以在代码中使用记录器
log.info("为CreditCard设置的卡片上下文={}",CreditCard);
因此,我们将看到
日志中的一行
为信用卡设置的卡片上下文=11111*111
如果没有这些选项,我们的日志将如下所示
card context set for creditCard=1111111111111
这篇关于如何使用slf4j框架实现敏感数据的屏蔽?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文