在现在这个网络发达的环境下,安全问题让很多公司都头疼。许多项目中的数据库的连接配置文件都选择了相应的加密方式去加密。
今天为大家介绍Durid方法对数据库连接信息加密以及解密。
step1:(加密)
从网上down一个jar包:druid-1.0.4.jar
cmd命令行执行以下命令:
java -cp druid-1.0.4.jar com.alibaba.druid.filter.config.ConfigTools 用户名or密码
step2:解密
applicationContext.xml中数据库连接的配置
<bean id="dataSource" class="com.sunyard.audit.util.DecryptDruidSource" init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="driverClassName" value="${Driver_Name}" />
<property name="url" value="${URL}" />
<property name="username" value="${UserName}" />
<property name="password" value="${Password}" />
<!-- 数据库密码加密,以下两行配置必需 -->
<property name="filters" value="config" />
<property name="connectionProperties" value="config.decrypt=true" />
<!-- 以上两行加密 -->
</bean>
step3:(config.proerties中)
jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://*.*.*.*:3306/lube_dev?connectTimeout=1000&socketTimeout=12000&useUnicode=true&characterEncoding=utf-8
jdbc_username=加密后的用户名
jdbc_password=加密后的密码
step4:(继承方法):阿里这边默认是对密码解密的,所以这边只需要对用户名解密,如果url加密,以此类推
/**
* 用来解密配置中的密文(重点配置,在这里扩展用户名的解密)
* setUsername(name) 方法对应xml中的一个property属性,password默认加密不需要重写,
* 还可以加密url 重写setUrl(url)
*/
@SuppressWarnings("all")
public class DecryptDruidSource extends DruidDataSource{
@Override
public void setUsername(String username) {
try {
username = ConfigTools.decrypt(username);
} catch (Exception e) {
e.printStackTrace();
}
super.setUsername(username);
}
}
ps:如果你将上面的封装起来,可以用下面的方法直接调用
项目中应用到username和password的时候需要解密
Properties prop = new Properties();
prop.load(AuditInitServlet.class.getClassLoader().getResourceAsStream("config.properties"));
UserName=ConfigTools.decrypt(prop.getProperty("UserName"));
Password=ConfigTools.decrypt(prop.getProperty("Password"));