1.首先,假设你已经配置好了spring项目
2.以下的配置添加到spring.xml(加密了userName和password):
<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<!-- <property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" /> -->
<!-- 指定自定义加密/解密的bean -->
<property name="properties" ref="dataSourcePropertiesCustomer"/>
<property name="acquireIncrement" value="${c3p0.acquireIncrement}"/>
<property name="initialPoolSize" value="${c3p0.initialPoolSize}"/>
<property name="minPoolSize" value="${c3p0.minPoolSize}"/>
<property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>
<property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/>
<property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>
<property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTestPeriod}"/>
<property name="maxIdleTime" value="${c3p0.maxIdleTime}"/>
<property name="testConnectionOnCheckin" value="${c3p0.testConnectionOnCheckin}"/>
</bean>
<!-- 加密解密pw, 这的class指定了你的自定义类(加密解密 jdbc的密码) -->
<bean id="dataSourcePropertiesCustomer" class="com.util.EncryptedDataSourceFactory">
<property name="properties">
<props>
<prop key="user">${jdbc.username}</prop>
<prop key="password">${jdbc.password}</prop>
</props>
</property>
</bean>
3.以下是自定义的加密解密的类(直接复制就行,不用改,用的是Java自带的Base64算法)
package com.util;
import java.util.Base64;
import java.util.Properties;
import org.springframework.beans.factory.FactoryBean;
public class EncryptedDataSourceFactory implements FactoryBean<Object> {
private Properties properties;
public Object getObject() throws Exception {
return getProperties();
}
public Class<Properties> getObjectType() {
return java.util.Properties.class;
}
public boolean isSingleton() {
return true;
}
public Properties getProperties() {
return properties;
}
public void setProperties(Properties inProperties) {
this.properties = inProperties;
String originalUsername = properties.getProperty("user");
String originalPassword = properties.getProperty("password");
if (originalUsername != null){
String newUsername = decryptDESUsername(originalUsername);
properties.put("user", newUsername);
}
if (originalPassword != null){
String newPassword = decryptDESPassword(originalPassword);
properties.put("password", newPassword);
}
}
private String decryptDESUsername(String originalUsername) {
return decryptDES(originalUsername);
}
private String decryptDESPassword(String originalPassword) {
return decryptDES(originalPassword);
}
/**
* 解密
*
* @param data
* 原始数据
* @return 加密后的数据
*/
public static String decryptDES(String data) {
try {
byte[] key = Base64.getDecoder().decode(data);
return new String(key, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 加密
*
* @param data
* 原始数据
* @return 加密后的数据
*/
public static String encryptDES(String data) {
try {
String key = Base64.getEncoder().encodeToString(data.getBytes("UTF-8"));
return key;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
4.假设你密码是123456和用户名abc,先测试获取加密的密码和用户名:
配置文件如下:
5.像这样以后要改连接的密码 可以添加测试类来先加密,再修改配置文件即可。
参考:1.c3p0明文密码加密:https://blog.youkuaiyun.com/tanglei6636/article/details/70143199
2.Java自带的加密解密算法:https://blog.youkuaiyun.com/hqm12345qw/article/details/79804295?utm_source=blogxgwz8