当前位置: 首页 > 知识库问答 >
问题:

使用logback掩码json值

籍利
2023-03-14
<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''}",

共有1个答案

幸鸿轩
2023-03-14

我能够通过编写ValueMasker的自定义实现来屏蔽敏感数据

需要两个组件:

  1. 实现ValueMasker
  2. 的类
  3. logback.xml
  4. 中声明 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