1.首先,假设你已经配置好了spring项目

2.以下的配置添加到spring.xml(加密了userName和password):


 

  1. ​<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">​
  2. ​<property name="driverClass" value="${jdbc.driver}" />​
  3. ​<property name="jdbcUrl" value="${jdbc.url}" />​
  4. ​<!-- <property name="user" value="${jdbc.username}" />​
  5. ​<property name="password" value="${jdbc.password}" /> -->​
  6. ​<!-- 指定自定义加密/解密的bean -->​
  7. ​<property name="properties" ref="dataSourcePropertiesCustomer"/> ​

  8. ​<property name="acquireIncrement" value="${c3p0.acquireIncrement}"/> ​
  9. ​<property name="initialPoolSize" value="${c3p0.initialPoolSize}"/> ​
  10. ​<property name="minPoolSize" value="${c3p0.minPoolSize}"/> ​
  11. ​<property name="maxPoolSize" value="${c3p0.maxPoolSize}"/> ​
  12. ​<property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/> ​
  13. ​<property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/> ​
  14. ​<property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTestPeriod}"/> ​
  15. ​<property name="maxIdleTime" value="${c3p0.maxIdleTime}"/> ​
  16. ​<property name="testConnectionOnCheckin" value="${c3p0.testConnectionOnCheckin}"/> ​
  17. ​</bean>​


  18. ​<!-- 加密解密pw, 这的class指定了你的自定义类(加密解密 jdbc的密码) -->​
  19. ​<bean id="dataSourcePropertiesCustomer" class="com.util.EncryptedDataSourceFactory"> ​
  20. ​<property name="properties"> ​
  21. ​<props> ​
  22. ​<prop key="user">${jdbc.username}</prop> ​
  23. ​<prop key="password">${jdbc.password}</prop> ​
  24. ​</props> ​
  25. ​</property> ​
  26. ​</bean>​

3.以下是自定义的加密解密的类(直接复制就行,不用改,用的是Java自带的Base64算法)


 

  1. ​package com.util;​

  2. ​import java.util.Base64;​
  3. ​import java.util.Properties;​

  4. ​import org.springframework.beans.factory.FactoryBean;​

  5. ​public class EncryptedDataSourceFactory implements FactoryBean<Object> {​

  6. ​private Properties properties;​

  7. ​public Object getObject() throws Exception {​
  8. ​return getProperties();​
  9. ​}​

  10. ​public Class<Properties> getObjectType() {​
  11. ​return java.util.Properties.class;​
  12. ​}​

  13. ​public boolean isSingleton() {​
  14. ​return true;​
  15. ​}​

  16. ​public Properties getProperties() {​
  17. ​return properties;​
  18. ​}​

  19. ​public void setProperties(Properties inProperties) {​
  20. ​this.properties = inProperties; ​
  21. ​String originalUsername = properties.getProperty("user"); ​
  22. ​String originalPassword = properties.getProperty("password"); ​
  23. ​if (originalUsername != null){ ​
  24. ​String newUsername = decryptDESUsername(originalUsername); ​
  25. ​properties.put("user", newUsername); ​
  26. ​} ​
  27. ​if (originalPassword != null){ ​
  28. ​String newPassword = decryptDESPassword(originalPassword); ​
  29. ​properties.put("password", newPassword); ​
  30. ​} ​
  31. ​}​

  32. ​private String decryptDESUsername(String originalUsername) {​
  33. ​return decryptDES(originalUsername);​
  34. ​}​

  35. ​private String decryptDESPassword(String originalPassword) {​
  36. ​return decryptDES(originalPassword);​
  37. ​}​

  38. ​/**​
  39. ​* 解密​
  40. ​* ​
  41. ​* @param data​
  42. ​* 原始数据​
  43. ​* @return 加密后的数据​
  44. ​*/​
  45. ​public String decryptDES(String data) {​
  46. ​try {​
  47. ​byte[] key = Base64.getDecoder().decode(data);​
  48. ​return new String(key, "UTF-8");​
  49. ​} catch (Exception e) {​
  50. ​e.printStackTrace();​
  51. ​}​
  52. ​return null;​
  53. ​}​

  54. ​/**​
  55. ​* 加密​
  56. ​* ​
  57. ​* @param data​
  58. ​* 原始数据​
  59. ​* @return 加密后的数据​
  60. ​*/​
  61. ​public String encryptDES(String data) {​
  62. ​try {​
  63. ​String key = Base64.getEncoder().encodeToString(data.getBytes("UTF-8"));​
  64. ​return key;​
  65. ​} catch (Exception e) {​
  66. ​e.printStackTrace();​
  67. ​}​
  68. ​return null;​
  69. ​}​

  70. ​}​

4.假设你密码是123456和用户名abc,先测试获取加密的密码和用户名:

C3p0数据源的连接密码加密处理_java

然后写到你的配置文件里面就行了,像这样:

C3p0数据源的连接密码加密处理_java_02

5.像这样以后要改连接的密码 可以添加测试类来先加密,再修改配置文件即可。