Java 通用DB链接字符串解密方法

  这种方式是主要是利用了spring加载顺序,因为在加载c3p0加载之前先对配置文件中的密码进行相应的解密,并且注入到属性password中,这样在创建c3p0连接的时候,用的密码就是明文密码了

/*注意,这里有个先后顺序的问题,<property name="properties"> 必须要在前面 ${env}是环境变量 开发,测试,生产,灰度*/
<bean id="C3p0DataSource" class="com.zns.tool.C3p0DataSource">  
<property name="properties">  
    <props>  
        <prop key="user" >${${env}.boms.jdbc.username}</prop>  
        <prop key="password" >${${env}.boms.jdbc.password}</prop>
        <prop key="jdbcUrl" >${${env}.boms.jdbc.url}</prop>    
    </props>  
</property>  
</bean>  

<!--组织架构数据源-->
<bean id="bomsDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
<property name="driverClass" value="${${env}.boms.jdbc.driver}"/>

<property name="properties" ref="dataSourceProperties"/> 
<property name="jdbcUrl" value="${${env}.boms.jdbc.url}"/>
<property name="user" value="${${env}.boms.jdbc.username}"/>
<property name="password" value="${${env}.boms.jdbc.password}"/>


<property name="initialSize" value="5"/>
<property name="maxActive" value="50"/>
<property name="maxIdle" value="2"/>
<property name="minIdle" value="1"/>
<property name="defaultAutoCommit" value="true"/>

</bean>

下面是读取属性然后解密再把属性传给链接池  DBCP PROXOLL DURID C3P0等等

package com.zns.tool;
//import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.util.Properties;  
import org.springframework.beans.factory.FactoryBean; 

import com.zns.tool.SecUtil;



public final class C3p0DataSource implements FactoryBean
{
	private Properties properties;    /*SPRING的属性对象*/
	private SecUtil    SecEncryptObj; /*安全对象里面有加密解密算法*/
    /*对虚类方法的继承实现,照抄*/
    public Object getObject() throws Exception {          return getProperties();    }  
    public Class getObjectType() {  return java.util.Properties.class;    }  
    public boolean isSingleton() {        return true;    }  
    public Properties getProperties() {        return properties;    }  
    
    public void setProperties(Properties inProperties) 
    {  
    	SecEncryptObj = new SecUtil();
        this.properties = inProperties;  
        String EncryUsername = properties.getProperty("user");  
        String EncryPassword = properties.getProperty("password");
        String EncryJdbcUrl = properties.getProperty("JdbcUrl");
        if (EncryUsername != null)
        {  
        	try {
        	String DecryUsername = SecEncryptObj.decrypt(EncryUsername);  
            properties.put("user", DecryUsername);
        	} catch (Exception e) {	e.printStackTrace(); } 
        }
        
        if (EncryPassword != null)
        {              
			try {
				String DecryPassword  = SecEncryptObj.decrypt(EncryPassword);
				properties.put("password", DecryPassword);  
			} catch (Exception e) {	e.printStackTrace(); }   
        }
        
        if (EncryJdbcUrl != null)
        {  
        	try {
        	String DecryJdbcUrl = SecEncryptObj.decrypt(EncryJdbcUrl);  
            properties.put("JdbcUrl", DecryJdbcUrl);
        	} catch (Exception e) {	e.printStackTrace(); } 
        }
                
    }  
        
}

关于加密和解密算法 就好多实现的方法了,自然那种单向加密就算了,毕竟解密需要好长时间.

这里给出前同事 康师傅写的加密和解密方法

这个不好,想看去我公众号查看

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值