2011-12-22 143 views
2

我需要在密码显示在日志文件中之前屏蔽密码。这是什么正则表达式?

密码的格式是“密码”:“pswd123”。它只是字母数字。掩码后,它会是“密码”:“*

在我的自定义模式类中,我有以下reg表达式,但它没有被拾取。任何想法应该如何? THX

@Override 
public String format(LoggingEvent event) { 

    String msg = super.format(event); 

    // regexp not being picked up 
    msg = msg.replace("\"password\":\"[^\"]*", "password:\"***\""); 

    return msg; 
} 
+1

就我个人而言,我认为你所做的一切都是错误的。不要在日志管理器中掩盖它。在进入日志管理器之前将其屏蔽。无论如何,你在用别人的真实密码做什么?这太危险了! – corsiKa 2011-12-22 16:48:45

+0

偏离主题,但仅由数字和字母组成的密码非常薄弱。你有什么特别的理由想要这样吗? – 2011-12-22 16:49:01

+0

我会说,根本不打印密码。你为什么要掩盖它? – adarshr 2011-12-22 16:49:13

回答

0

使用.replaceFirst().replace()只替换子

0
  1. 的replaceAll是你要找的
  2. 如果你想要一个完整的比赛,你错过了最后的\”在正则表达式结束
0

如果你希望它只是显示3 *很简单,如果你想让它显示1 *在密码的每个字符,这是一个有点困难。

Msg = Regex.Replace(Msg, "\"Password\":\"[^\"]+?\"", "\"Password\":\"***\"") 
0

您是否正在使用任何日志库,如log4j或slf4j?这些库具有使用正则表达式“替换字符串”的功能。您可以通过更改日志记录配置文件来全局使用并应用此功能。你仍然需要想出一个使用正则表达式生成器实用程序的正则表达式,如http://myregexp.com/,并自行构建一个正则表达式。

+0

是的,我使用log4j和slf4j作为外观。我从这个线程得到灵感:http://stackoverflow.com/questions/2461726/how-to-mask-credit-card-numbers-in-log-files-with-log4j – 2011-12-22 17:06:38

+0

看起来像Logback有这个功能http: //logback.qos.ch/manual/layouts.html#replace尝试查找log4j是否具有内置的此功能。 – 2011-12-22 17:11:20