gpt4 book ai didi

slf4j - 如何使用 slf4j 框架屏蔽敏感数据?

转载 作者:行者123 更新时间:2023-12-05 08:12:11 27 4
gpt4 key购买 nike

我想使用 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);
}

  1. 第二步是我们应该为 logback 创建 appender 到 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>

  2. 现在我们可以在我们的代码中使用 logger

    log.info("creditCard={}", creditCard);

  3. 结果,我们会看到

    日志中的一行

    为 creditCard=11111******111 设置的卡片上下文

如果没有这些选项,我们的日志会像这一行

card context set for creditCard=1111111111111

关于slf4j - 如何使用 slf4j 框架屏蔽敏感数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16775253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com