各位老师好, 平常配置spring的datasource密码是写死里面的。 为了保护数据库的安全性,总服务器会把一个加密后的文件放置某个地方,如何把解密后的值放置spring配置bean的property里面,而且还不能把解密后的密码放置到另一个文件里面,只能在程序中解决。 各位老师们, 帮帮忙出出解决方案吧 。 我现在一点想法都没有

解决方案 »

  1.   

    问题补充, 放置在内存中。  程序关了这样就会消失了。现在就是如何将在程序中解密的值配置到<property  name="password"  value="?"/> 上
      

  2.   

    在src下新建一个jdbc.properties文件,内容
    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/bbs
    jdbc.username=root
    jdbc.password=rootbeans.xml
    <bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    </bean>

    <bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
    <value>classpath:jdbc.properties</value>
    </property>
    </bean>
      

  3.   

    你好, 密码是加个密的, 而这个加密文件又不在项目中, 而在服务器某个地方。 我可以通过spring没加载之前用java程序解密获得到这个值,但是不知道如何赋值到<property name="password" value="?"/>上 , 必须spring加载到datasource的时候就赋值上去。 
      

  4.   

    你这个密码的解密是可逆的。那你就把配置文件记录在数据库中吧,读取的时候解密一下就行。
    然后创建DataSource的时候类似这样写:public C3P0DataSource() {        String driver = getStringValue(ConfigKeys.DB_DRIVER_CLASS_NAME);
            String jdbcUrl = getStringValue(ConfigKeys.DB_URL);
            String user = getStringValue(ConfigKeys.DB_USER);
            String password = getStringValue(ConfigKeys.DB_PASSWORD);
            int initPoolSize = getIntegerValue(ConfigKeys.DB_MAX_IDLE, "1");
            int maxPoolSize = getIntegerValue(ConfigKeys.DB_MAX_ACTIVE, "100");
            int idleTestPeriod = getIntegerValue(ConfigKeys.DB_IDLE_TEST_PERIOD, "0");
            int acquireIncrement = getIntegerValue(ConfigKeys.DB_ACQUIRE_INCREMENT, "2");
            int maxStatements = getIntegerValue(ConfigKeys.DB_MAX_STATEMENTS, "0");        try {
                ds = new ComboPooledDataSource();            ds.setJdbcUrl(jdbcUrl);
                ds.setDriverClass(driver);
                ds.setUser(user);
                ds.setPassword(password);
                ds.setInitialPoolSize(initPoolSize);
                ds.setMinPoolSize(initPoolSize);
                ds.setMaxPoolSize(maxPoolSize);
                ds.setIdleConnectionTestPeriod(idleTestPeriod);
                ds.setMaxIdleTime(1800);
                ds.setAcquireIncrement(acquireIncrement);
            } catch (Exception e) {
                logger.fatal("Init DataSource fialed.");
            }
        }
      

  5.   

    <config name="db" path="/jdbc.properties" />

    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" config="db.jdbc.driverClassName" />
    <property name="jdbcUrl" config="db.jdbc.url" />
    <property name="user" config="db.jdbc.username" />
    <property name="password" config="db.jdbc.password" />
    <property name="autoCommitOnClose" value="true" />
    <property name="maxStatements" config="db.cpool.maxStatements" />
    <property name="checkoutTimeout" config="db.cpool.checkoutTimeout" />
    <property name="idleConnectionTestPeriod" config="db.cpool.idleConnectionTestPeriod" />
    <property name="initialPoolSize" config="db.cpool.minPoolSize" />
    <property name="minPoolSize" config="db.cpool.minPoolSize" />
    <property name="maxPoolSize" config="db.cpool.maxPoolSize" />
    <property name="maxIdleTime" config="db.cpool.maxIdleTime" />
    <property name="acquireIncrement" config="db.cpool.acquireIncrement" />
    <property name="maxIdleTimeExcessConnections" config="db.cpool.maxIdleTimeExcessConnections" />
    </bean>