springMVC数据库加密解密

一般spring容器启动时,通过PropertyPlaceholderConfigurer类读取dbconfig.properties文件里的数据库配置信息。

通过这个原理,我们把加密后的数据库配置信息放到dbconfig.properties文件里,然后自定义一个继承PropertyPlaceholderConfigurer的类,实现解密,把解密后的信息又放回去。

dbconfig.properties 文件内容

jdbc.url.jeecg=jdbc\:oracle\:thin\:@localhost\:1521\:orcl
jdbc.username.jeecg=farm45
jdbc.password.jeecg=Biyu5YzU+6sxDRbmWEa3B2uUcImzDo0BuXjTlL505+/pTb+/0Oqd3ou1R6J8+9Fy3CYrM18nBDqf6wAaPgUGOg==
hibernate.dialect=org.hibernate.dialect.OracleDialect
jdbc.dbType=oracle
validationQuery.sqlserver=SELECT 1 FROM DUAL
hibernate.hbm2ddl.auto=none

自定义的取加密信息的类EncryptablePropertyPlaceholderConfigurer

package com.sm.util;
import java.util.Properties;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanInitializationException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer{
    
        protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)  
            throws BeansException {  
                try {  
                    String password = props.getProperty("jdbc.password.jeecg");  
                    if (password != null) {  
                        props.setProperty("jdbc.password", Des.Decrypt(password));  
                    }  
                    super.processProperties(beanFactory, props);  
                } catch (Exception e) {  
                    e.printStackTrace();  
                    throw new BeanInitializationException(e.getMessage());  
                }  
                
        }
    
}

Des.java是一个用ConfigTools 加密和解密的工具类

package com.sm.util;
import com.alibaba.druid.filter.config.ConfigTools;
public class Des {
    //加密  
    public static String Encrypt(String str){  
        String encryptPwd = "";
        try {
            encryptPwd = ConfigTools.encrypt(str);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return  encryptPwd;  
    }  
      
    //解密  
    public static String Decrypt(String str){
        String decryptPwd = "";
        try {
            decryptPwd = ConfigTools.decrypt(str);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new String(decryptPwd);  
    }  
}

spring配置:

<bean id="propertyConfigurer" class="com.sm.util.EncryptPropertyPlaceholderConfigurer" >
        <property name="locations">    
           <list>    
               <value>classpath:dbconfig.properties</value>    
           </list>    
       </property>
</bean>

<bean name="dataSource_jeecg" class="com.alibaba.druid.pool.DruidDataSource"
        init-method="init" destroy-method="close">
        <property name="url" value="${jdbc.url.jeecg}" />
        <property name="username" value="${jdbc.username.jeecg}" />
        <property name="password" value="${jdbc.password.jeecg}" />
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="0" />
        <!-- 连接池最大使用连接数量 -->
        <property name="maxActive" value="20" />
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="20" />
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="5" />
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="60000" />
        <!-- <property name="poolPreparedStatements" value="true" /> <property
            name="maxPoolPreparedStatementPerConnectionSize" value="33" /> -->
        <property name="validationQuery" value="${validationQuery.sqlserver}" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />
        <property name="testWhileIdle" value="true" />

        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="25200000" />

        <!-- 打开removeAbandoned功能 -->
        <property name="removeAbandoned" value="true" />
        <!-- 1800秒,也就是30分钟 -->
        <property name="removeAbandonedTimeout" value="1800" />
        <!-- 关闭abanded连接时输出错误日志 -->
        <property name="logAbandoned" value="true" />

        <!-- 开启Druid的监控统计功能 -->
        <property name="filters" value="stat" />
        <!--<property name="filters" value="mergeStat" /> -->
        <!-- Oracle连接是获取字段注释 -->
        <property name="connectProperties">
            <props>
                <prop key="remarksReporting">true</prop>
            </props>
        </property>
    </bean>

转载于:https://my.oschina.net/u/3013327/blog/837565

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值