一尘不染

在Spring xml文件中隐藏数据源密码

java

有没有一种方法可以在xml
spring配置文件中隐藏/加密密码?我读到DataSource的“自定义”子类是可能的,但是解决方案将密钥与纯文本保存在相同的配置文件中…因此有点没用。

有没有办法使用KeyStore?例如,从密钥库中读取值。

谢谢大家


阅读 200

收藏
2020-12-03

共1个答案

一尘不染

是的,你可以这样做。您将必须围绕数据源类创建一个包装器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);
    }
}
2020-12-03