gpt4 book ai didi

java - Atomikos 初始化期间以纯文本形式记录用户名和密码

转载 作者:行者123 更新时间:2023-12-01 11:03:21 27 4
gpt4 key购买 nike

我们的项目依靠 Atomikos 提供轻量级的交易管理。但是,我们发现它在初始化过程中以明文形式记录了数据库用户名和密码。

例如

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]

是否有任何配置可以禁止记录这些 secret 信息?

最佳答案

就配置而言,您可以将日志类别 com.atomikos.jdbc.AtomikosDataSourceBean 的阈值设置为 WARN。有一些流行的日志框架的示例 here 。这将过滤掉整个消息。

如果您只想过滤 secret 属性,您可以创建 AtomikosDataSourceBean 的子类并重写 protected 方法printXaProperties()。然后您可以过滤掉任何 secret 属性,例如密码。

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。我们拭目以待。

关于java - Atomikos 初始化期间以纯文本形式记录用户名和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33162248/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com