2015-10-16 70 views
0

我們的項目依靠Atomikos提供輕量級事務管理。但是,我們發現它在初始化期間以純文本格式記錄數據庫用戶名和密碼。Atomikos初始化期間用戶名和密碼以純文本形式登錄

E.g.

2015-10-15 16:43:01,106 [http-bio-8080-exec-4] INFO com.atomikos.jdbc.AtomikosDataSourceBean - AtomikosDataSoureBean 'LAB_Oracle': initializing with [ xaDataSourceClassName=oracle.jdbc.xa.client.OracleXADataSource, uniqueResourceName=LAB_Oracle, maxPoolSize=8, minPoolSize=1, borrowConnectionTimeout=30, maxIdleTime=60, reapTimeout=0, maintenanceInterval=60, testQuery=null, xaProperties=[URL=jdbc:oracle:thin:@***:1537:oocait01,user=***,password=**] loginTimeout=0] 

是否有任何可以抑制這些機密信息記錄的配置?

回答

1

就配置而言,您可以將日誌類別com.atomikos.jdbc.AtomikosDataSourceBean的閾值設置爲WARN。有一些流行的日誌框架here的例子。這將過濾出整個消息。

如果您只想過濾機密屬性,可以創建AtomikosDataSourceBean的子類並覆蓋受保護的方法printXaProperties()。然後,您可以過濾掉任何機密屬性,例如密碼。

package my.com.atomikos.jdbc; 

import java.util.Enumeration; 
import java.util.Properties; 

public class AtomikosDataSourceBean extends com.atomikos.jdbc.AtomikosDataSourceBean { 
    private static final long serialVersionUID = 1L; 

    protected String printXaProperties() 
    { 
     Properties xaProperties = getXaProperties(); 
     StringBuffer ret = new StringBuffer(); 
     if (xaProperties != null) { 
      Enumeration it = xaProperties.propertyNames(); 
      ret.append ("["); 
      boolean first = true; 
      while (it.hasMoreElements()) { 
       String name = (String) it.nextElement(); 
       if (name.equals ("password")) continue; 
       if (! first) ret.append (","); 
       String value = xaProperties.getProperty(name); 
       ret.append (name); ret.append ("="); ret.append (value); 
       first = false; 
      } 
      ret.append ("]"); 
     } 
     return ret.toString(); 
    } 
} 

由於Atomikos公司將自動檢測日誌框架,這可能取決於你如何測試,封裝和部署應用程序,使用一個子類變化可能更萬無一失。

我提交了一個pull request,可以使它變成版本4.我們將會看到。

相關問題