- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 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 创建 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>
现在我们可以在我们的代码中使用 logger
log.info("creditCard={}", creditCard);
结果,我们会看到
日志中的一行
为 creditCard=11111******111 设置的卡片上下文
如果没有这些选项,我们的日志会像这一行
card context set for creditCard=1111111111111
关于slf4j - 如何使用 slf4j 框架屏蔽敏感数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16775253/
我正在遍历自定义数据对象列表,并以可分页的格式将数据输出到屏幕。每个项目都需要提供编辑详细信息(重定向到另一个 View )和删除数据的能力。为此,我需要传递某种 id 来标识将要更新或删除的记录。我
我们正在使用 React-Native 构建移动应用程序,需要将一些敏感数据(例如客户端 key /密码)嵌入到移动应用程序本身中。 在安全性方面(最难进行逆向工程),标准做法是什么?数据应该在 na
我们已经知道使用 char[] 而不是 String 来处理敏感数据的建议/做法。有多种原因。一种是在不再需要敏感数据后立即清理它们: char[] passwd = passwordProvider
我有一些敏感数据想在使用后直接清除。目前,敏感数据的形式是 NSString。 NSString 在我的理解中是不可变的,这意味着我无法真正清除数据。不过,NSMutableString 似乎更合适,
我想知道如何推送到我的 Github 存储库(我需要公开该存储库,以便向雇主展示),而不显示敏感信息。我正在使用 Eclipse/Java。 我制作了一个在 Chrome 中使用 Selenium w
我是一名优秀的程序员,十分优秀!