2011-12-22 100 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