有没有一种方法可以在xml spring配置文件中隐藏/加密密码?我读到DataSource的“自定义”子类是可能的,但是解决方案将密钥与纯文本保存在相同的配置文件中…因此有点没用。
有没有办法使用KeyStore?例如,从密钥库中读取值。
谢谢大家
是的,你可以这样做。您将必须围绕数据源类创建一个包装器bean。这是我以前做过的一个例子。希望这可以帮助!
<beans> <bean id="someDao" class="com.dao.SomeDAOImpl"> <property name="datasource"> <ref local="secureDataSource"/> </property> </bean> <bean id="secureDataSource" class="com.ds.SecureDataSource"> <property name="driverClassName"> <value><your driver></value> </property> <property name="url"> <value><your url></value> </property> <property name="username"> <value><your user id></value> </property> <property name="password"> <value><encrypted_pwd></value> </property> </bean> </beans>
然后,在SecureDataSource类中,您将需要解密密码。
import java.sql.Connection; import java.sql.SQLException; public class SecureDataSource extends DriverManagerDataSource{ private String url; private String username; private String password; /** * @param url the url to set */ public void setUrl(String url) { this.url = url; } /** * @param username the username to set */ public void setUsername(String username) { this.username = username; } /** * @param password the password to set */ public void setPassword(String password) { this.password = password; } protected Connection getConnectionFromDriverManager() throws SQLException { String decryptedPassword = null; //decrypt the password here return getConnectionFromDriverManager(url,username,decryptedPassword); } }