首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在记录之前屏蔽敏感数据- log4j

在记录之前屏蔽敏感数据- log4j
EN

Stack Overflow用户
提问于 2018-03-07 11:57:56
回答 1查看 9.5K关注 0票数 1

出于日志目的,在我一直在工作的项目中使用了Jackson的writeValueAsString(object)方法,而不是使用toString()方法。

代码语言:javascript
运行
复制
LOGGER.info(mapper.writeValueAsString(object));

现在,我得到了在日志中屏蔽密码和信用卡号码等敏感信息的要求。如果正在使用toString(),我可以从toString()方法中删除这些敏感数据。但在我的情况下,我找不到这样简单而正确的方法来解决我的问题。我不是在这样的情况下,我可以改变整个事情来使用toString()

我读到,通过使用%replace方法,我可以使用预定义的模式替换不需要登录的数据。但所有需要屏蔽的敏感数据都不会遵循单一模式。

我尝试截取日志事件,查找特定信息并屏蔽它们(使用实现LogEventFactory的类)。即使它是一个有效的解决方案,我也不认为它是一个好的解决方案,因为每次寻找大字符串中的数据都会花费很大的成本。

有没有什么办法是我还没有解决我的问题的?使用%replace的方法是可行的吗?如果是这样的话,是怎么做的?

EN

回答 1

Stack Overflow用户

发布于 2018-12-21 14:27:55

我认为有三种方法可以解决你的问题,你都提到了。最有效的方法是防止将敏感数据记录到记录器中,这需要做大量的工作。

第二种方法是修改附加器。通过扩展log4j Appender,您可以修改LogEvent。

最后一种方法是修改PatternLayout。这是一个example

代码语言:javascript
运行
复制
public class CardNumberFilteringLayout extends PatternLayout {
    private static final String MASK = "$1++++++++++++";
    private static final Pattern PATTERN = Pattern.compile("([0-9]{4})([0-9]{9,15})");

    @Override
    public String format(LoggingEvent event) {
        if (event.getMessage() instanceof String) {
            String message = event.getRenderedMessage();
            Matcher matcher = PATTERN.matcher(message);

            if (matcher.find()) {
                String maskedMessage = matcher.replaceAll(MASK);
                @SuppressWarnings({ "ThrowableResultOfMethodCallIgnored" })
                Throwable throwable = event.getThrowableInformation() != null ? 
                        event.getThrowableInformation().getThrowable() : null;
                LoggingEvent maskedEvent = new LoggingEvent(event.fqnOfCategoryClass,
                        Logger.getLogger(event.getLoggerName()), event.timeStamp, 
                        event.getLevel(), maskedMessage, throwable);

                return super.format(maskedEvent);
            }
        }
        return super.format(event);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49143855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档