2015-10-16 56 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.我们将会看到。