我回答自己的问题可能很有趣。但我还是想告诉我解决方案,其他可能也遇到过类似问题的人。
为简单起见,我使用了base64Enprer和base64Deprer。稍后,我将修改代码以使用安全/更好的加密/解密算法。
我已经使用以下代码对数据库密码(例如:root)进行了编码:
private String enpre(String str) { base64Enprer enprer = new base64Enprer(); str = new String(enprer.enpreBuffer(str.getBytes())); return str; }并将编码后的密码放在我的database.properties文件中,如下所示:
之前
db.driverClassName=com.mysql.jdbc.Driverdb.url=jdbc:mysql://localhost/myDBdb.username=rootdb.password=root
后
db.driverClassName=com.mysql.jdbc.Driverdb.url=jdbc:mysql://localhost/myDBdb.username=rootdb.password=cm9vdA== (Note: enpred 'root' by using base64Enprer)
现在,我为org.apache.commons.dbcp.BasicDataSource编写了一个包装器类,并重写了setPassword()方法:
import java.io.IOException;import org.apache.commons.dbcp.BasicDataSource;import sun.misc.base64Deprer;public class MyCustomBasicDataSource extends BasicDataSource{ public CustomBasicDataSource() { super(); } public synchronized void setPassword(String enpredPassword){ this.password = depre(enpredPassword); } private String depre(String password) { base64Deprer deprer = new base64Deprer(); String depredPassword = null; try { depredPassword = new String(deprer.depreBuffer(password)); } catch (IOException e) { e.printStackTrace(); } return depredPassword; }}这样我解码(base64Deprer)database.properties中提供的编码密码
并且还修改了springApplicationContext.xml文件中提到的我的dataSource bean的class属性。
<beans:bean id="dataSource" destroy-method="close"> <beans:property name="driverClassName"><beans:value>${db.driverClassName}</beans:value></beans:property> <beans:property name="url"><beans:value>${db.url}</beans:value></beans:property> <beans:property name="username"><beans:value>${db.username}</beans:value></beans:property> <beans:property name="password"><beans:value>${db.password}</beans:value></beans:property>谢谢。



