c3p0,druid,springboot项⽬使⽤数据库配置⽂件加密访问数据库加密访问
原理
将配置⽂件中的密码进⾏加密使其以密⽂⽅式存在,在初始化连接池时进⾏解密操作,达到成功创建连接池的⽬的。
⽬前主要使⽤的连接池有以下⼏个:
c3p0
druid
springboot框架的连接池
C3P0连接池
1. jdbc.properties中密码由明⽂改成密⽂
2. 在配置hange.v2.c3p0.ComboPooledDataSource的地⽅ ,增加properties属性,编写⼀个PropertiesFactory类,实现
password的解密操作即可。
编写DatasourcePropertiesFactory类
public class DatasourcePropertiesFactory {
private static final String PASSWORD_PROPERTY = "password";
public static Properties getProperties(String password) throws Exception {
Properties properties = new Properties();
try {
/**
* 这⾥对参数password进⾏解密得到解密后的密码
*/
String decodePassword = 解密(password)
properties.setProperty(PASSWORD_PROPERTY, decodePassword);
} catch (Exception e) {
//处理异常
}
return properties;
}
}
修改l中数据源datasource的配置,为ComboPooledDataSource配置名为properties的属性,同时取消password的property配置项
<property name="properties">
<bean class="datasource.CustomDatasourcePropertiesFactory"
factory-method="getProperties">
<constructor-arg type="java.lang.String">
<value>${jdbc.password}</value>
</constructor-arg>
</bean>
</property>
Druid连接池
druid连接池默认使⽤RSA加密连接,修改解密算法⽐较⿇烦,建议直接使⽤druid提供的⼯具进⾏加解密
1. cmd控制台使⽤以下命令获取公私钥、加密密⽂
java -cp druid-1.0.31.jar com.alibaba.fig.ConfigTools your_password
1. 修改jdbc.properties中密码改成上⾯控制台中获取到的加密密码,注意不要复制成公私钥,如果有配置testOnReturn
和testOnBorrow 的⼀定要设置成true
2. 修改l中com.alibaba.druid.pool.DruidDataSource 的配置,增加以下配置
<!-- config.decrypt=true -->
<property name="filters" value="config" />
<property name="connectionProperties" value="config.decrypt=true" />
springboot框架
springboot引⼊jasypt进⾏加解密操作,默认加密算法是PBEWithMD5AndDES,⼀种结合PBE,MD5和DES的复合加密算法
1. maven引⼊jasypt依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
2. 配置加密密钥
jasypt:
encryptor:
password: 123456这个密钥由运维提供
3. 编写测试⽤例获取加密密码(也可以在控制台使⽤java命令获取)
@Autowired
StringEncryptor stringEncryptor;
@Test
public void encryptPwd() {
druid连接池配置详解
String result = pt("yourpassword");
System.out.println(result);
}
4. 修改配置⽂件l中password项,⽤ENC()括起来
spring:
datasource:
url: jdbc:mysql://192.168.171.231:3306/eoc?characterEncoding=utf8&useUnicode=true
username: test
password: ENC(括号⾥⾯填上⾯获取到的加密密⽂)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。