使用 logback-spring.xml 屏蔽 SOAP 信封中的敏感数据

时间:2021-06-11 11:36:35

标签: java spring soap logback sensitive-data

我目前正在努力屏蔽在 SOAP 客户端截获的日志中的可用数据。我采用了编写自定义 PatternLayout 的方法:

public class PatternMaskingLayout extends ch.qos.logback.classic.PatternLayout {

private Pattern multilinePattern;
private final List<String> maskPatterns = new ArrayList<>();

public void addMaskPattern(String maskPattern) {
    maskPatterns.add(maskPattern);
    multilinePattern = Pattern.compile(
            String.join("|", maskPatterns),
            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()) {
        IntStream.rangeClosed(1, matcher.groupCount()).forEach(group -> {
            if (matcher.group(group) != null) {
                IntStream.range(matcher.start(group), matcher.end(group))
                        .forEach(i -> sb.setCharAt(i, '*')); // replace each character with asterisk
            }
        });
    }
    return sb.toString();
}

}

我的 logback-spring.xml appenders 看起来像:

        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="app.example.monitoring.tracing.PatternMaskingLayout">
            <maskPattern>\"username\"\s*:\s*\"(.*?)\"</maskPattern>
            <pattern>
                ${LOGBACK_LOGGING_PATTERN:-%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %logger{36} : %msg %replace(%ex){'\n','\\u000a'}%nopex%n}
            </pattern>
        </layout>
    </appender>

我仍然无法屏蔽我的用户名。 XML 字段看起来像 <xa2:username>John</xa2:username>|

有人有这方面的经验吗?

0 个答案:

没有答案