<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<pattern>
<pattern>
{
"creation_timestamp": "%d{yyyy-MM-dd'T'HH:mm:ss, UTC}",
"msg": "%msg",
"log_type": "%level",
}
</pattern>
<omitEmptyFields>true</omitEmptyFields>
</pattern>
</providers>
</encoder>
"msg": "%replace(%msg){'\"Code\":'.*'', '\"Code\":'xxx''}",
我能够通过编写ValueMasker的自定义实现来屏蔽敏感数据
需要两个组件:
ValueMasker
logback.xml
JSONGeneratorDecorator
package com.mask;
import com.fasterxml.jackson.core.JsonStreamContext;
import net.logstash.logback.mask.ValueMasker;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.IntStream;
public class SensitiveMaskingPatternLayout implements ValueMasker {
private Pattern multilinePattern = Pattern.compile("\\\"msg\\\"\\s*:\\s*\\\"(.*?)\\\"", Pattern.MULTILINE);;
private List<String> maskPatterns = new ArrayList<>();
private String maskMessage(String 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, 'x'));
}
});
}
return sb.toString();
}
@Override
public Object mask(JsonStreamContext context, Object value) {
if (value instanceof CharSequence) {
return maskMessage((String) value);
}
return value;
}
}
<configuration>
<appender name="mask" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<pattern>
<pattern>
{
"msg": "%msg",
"log_type": "%level"
}
</pattern>
<omitEmptyFields>true</omitEmptyFields>
</pattern>
</providers>
<logLevel>
INFO
</logLevel>
<jsonGeneratorDecorator class="net.logstash.logback.mask.MaskingJsonGeneratorDecorator">
<valueMasker class="com.mask.SensitiveMaskingPatternLayout"/>
</jsonGeneratorDecorator>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="mask" />
</root>
</configuration>
package com.example;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class App {
private static final Logger logger = LoggerFactory.getLogger(App.class);
public static void main(String[] args) {
Map<String, String> user = new HashMap<>();
user.put("user_id", "97588");
user.put("email_id", "random@email.com");
user.put("msg", "hello world");
JSONObject userDetails = new JSONObject(user);
logger.info("MaskingPatternExample log from {}" + userDetails);
}
}
{"msg":"MaskingPatternExample log from {}{\"email_id\":\"random@email.com\",\"msg\":\"xxxxxxxxxxx\",\"user_id\":\"97588\"}","log_type":"INFO"}
我试图在我的Spring boot应用程序中使用L屏蔽敏感信息,如SSN和信用卡ogback.xml.我在网络上搜索了各种链接,但没有找到好的解决方案。有没有简单的方法或任何库来屏蔽日志中的敏感信息? 输入 输出: 在堆栈溢出上发现了这个,但很难找出正则表达式。任何帮助都将不胜感激 使用logback屏蔽日志中的敏感数据
问题内容: 当前,我们通常记录所有进出我们系统的XML文档,其中一些包含明文密码。我们希望能够配置执行此操作的logback logger / appender进行某种模式匹配或类似操作,并且如果它检测到存在替换它的密码(很可能带有星号)。注意,我们不想过滤掉日志条目,我们想掩盖其中的一部分。我很乐意提供有关如何通过注销执行此操作的建议。谢谢。 问题答案: 0.9.27版本的logback引入了替
介绍 Cpumasks 是Linux内核提供的保存系统CPU信息的特殊方法。包含 Cpumasks 操作 API 相关的源码和头文件: include/linux/cpumask.h lib/cpumask.c kernel/cpu.c 正如 include/linux/cpumask.h 注释:Cpumasks 提供了代表系统中 CPU 集合的位图,一位放置一个 CPU 序号。我们已经在 Ker
我试图编写一个函数来解码通过WebSocket连接发送到节点服务器的屏蔽缓冲区。结合使用RFC6455和一些旧的SO答案,这就是我迄今为止所做的: 此代码有两个问题: > 它不能正确地揭开消息掩码,只是输出乱码Unicode 它每次输出不同的解码消息,即使输入是恒定的 (有效负载长度永远不会超过126,因此不需要担心处理额外的字节)
本文向大家介绍Java掩码的几种使用例举,包括了Java掩码的几种使用例举的使用技巧和注意事项,需要的朋友参考一下 java掩码 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对呐喊教程的支持。如果你想了解更多相关内容请查看下面相关链接
问题内容: 我想找到一种方法来执行SQL查询,该查询将计算存储在数据库中的子网掩码的cidr(位表示)。因此,例如,我将255.255.255.0或其十进制值(4294967040)存储在数据库中。我想进行选择并通过查询获取/ 24表示形式。 我已经完成了如下操作来确定子网的最后一个IP,所以我希望做类似的事情来确定掩码的cidr表示形式。 最好是一条可以在mysql,postgres,oracl