Java 通用DB链接字符串解密方法
Posted 客家族_祖仙教_小凡仙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
关于加密和解密算法 就好多实现的方法了,自然那种单向加密就算了,毕竟解密需要好长时间.
这里给出前同事 康师傅写的加密和解密方法
这个不好,想看去我公众号查看
以上是关于Java 通用DB链接字符串解密方法的主要内容,如果未能解决你的问题,请参考以下文章
Java & PHP & Javascript 通用 RSA 加密 解密 (长字符串)