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

blo*_*low 12 java xml spring keystore password-encryption

有一种方法可以在xml spring配置文件中隐藏/加密密码吗?我读过可以使用DataSource的"自定义"子类,但解决方案将密钥保存在与纯文本相同的配置文件中......所以有点无用.

有一种方法可以使用KeyStore吗?例如,从密钥库中读取值.

谢谢大家.

ord*_*rig 12

隐藏密码的目的是什么?我建议你在容器中配置数据源(Tomcat,JBoss或你使用的任何东西),并使用jndi将数据源注入你的应用程序:

<jee:jndi-lookup id="thedatasource"
                     jndi-name="java:comp/env/jdbc/thedatasource"
                     lookup-on-startup="false"
                     expected-type="javax.sql.DataSource"/>
Run Code Online (Sandbox Code Playgroud)

这样,您不必在应用程序中公开密码,而只在servlet容器中公开密码.

  • 我正在开发桌面客户端 - 服务器应用程序,我想保护应用程序数据库.我想要独特,可以触摸我的数据库. (2认同)

Coo*_*ans 11

是的,你可以这样做.您必须在数据源类周围创建一个包装器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>
Run Code Online (Sandbox Code Playgroud)

然后在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);
    }
}
Run Code Online (Sandbox Code Playgroud)