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

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.  
  9. <property name="acquireIncrement" value="${c3p0.acquireIncrement}"/>

  10. <property name="initialPoolSize" value="${c3p0.initialPoolSize}"/>

  11. <property name="minPoolSize" value="${c3p0.minPoolSize}"/>

  12. <property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>

  13. <property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/>

  14. <property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>

  15. <property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTestPeriod}"/>

  16. <property name="maxIdleTime" value="${c3p0.maxIdleTime}"/>

  17. <property name="testConnectionOnCheckin" value="${c3p0.testConnectionOnCheckin}"/>

  18. </bean>

  19.  
  20.  
  21. <!-- 加密解密pw, 这的class指定了你的自定义类(加密解密 jdbc的密码) -->

  22. <bean id="dataSourcePropertiesCustomer" class="com.util.EncryptedDataSourceFactory">

  23. <property name="properties">

  24. <props>

  25. <prop key="user">${jdbc.username}</prop>

  26. <prop key="password">${jdbc.password}</prop>

  27. </props>

  28. </property>

  29. </bean>

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

 
  1. package com.util;

  2.  
  3. import java.util.Base64;

  4. import java.util.Properties;

  5.  
  6. import org.springframework.beans.factory.FactoryBean;

  7.  
  8. public class EncryptedDataSourceFactory implements FactoryBean<Object> {

  9.  
  10. private Properties properties;

  11.  
  12. public Object getObject() throws Exception {

  13. return getProperties();

  14. }

  15.  
  16. public Class<Properties> getObjectType() {

  17. return java.util.Properties.class;

  18. }

  19.  
  20. public boolean isSingleton() {

  21. return true;

  22. }

  23.  
  24. public Properties getProperties() {

  25. return properties;

  26. }

  27.  
  28. public void setProperties(Properties inProperties) {

  29. this.properties = inProperties;

  30. String originalUsername = properties.getProperty("user");

  31. String originalPassword = properties.getProperty("password");

  32. if (originalUsername != null){

  33. String newUsername = decryptDESUsername(originalUsername);

  34. properties.put("user", newUsername);

  35. }

  36. if (originalPassword != null){

  37. String newPassword = decryptDESPassword(originalPassword);

  38. properties.put("password", newPassword);

  39. }

  40. }

  41.  
  42. private String decryptDESUsername(String originalUsername) {

  43. return decryptDES(originalUsername);

  44. }

  45.  
  46. private String decryptDESPassword(String originalPassword) {

  47. return decryptDES(originalPassword);

  48. }

  49.  
  50. /**

  51. * 解密

  52. *

  53. * @param data

  54. * 原始数据

  55. * @return 加密后的数据

  56. */

  57. public String decryptDES(String data) {

  58. try {

  59. byte[] key = Base64.getDecoder().decode(data);

  60. return new String(key, "UTF-8");

  61. } catch (Exception e) {

  62. e.printStackTrace();

  63. }

  64. return null;

  65. }

  66.  
  67. /**

  68. * 加密

  69. *

  70. * @param data

  71. * 原始数据

  72. * @return 加密后的数据

  73. */

  74. public String encryptDES(String data) {

  75. try {

  76. String key = Base64.getEncoder().encodeToString(data.getBytes("UTF-8"));

  77. return key;

  78. } catch (Exception e) {

  79. e.printStackTrace();

  80. }

  81. return null;

  82. }

  83.  
  84. }

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

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

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

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

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

 

参考:1.c3p0明文密码加密:https://blog.****.net/tanglei6636/article/details/70143199

2.Java自带的加密解密算法:https://blog.****.net/hqm12345qw/article/details/79804295?utm_source=blogxgwz8

 

原文地址:https://blog.****.net/BAStriver/article/details/86544341