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 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 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.csdn.net/tanglei6636/article/details/70143199
2.Java自带的加密解密算法:https://blog.csdn.net/hqm12345qw/article/details/79804295?utm_source=blogxgwz8
原文地址:https://blog.csdn.net/BAStriver/article/details/86544341