Druid對數據庫密碼加密的坑


背景:

在對已有項目搭建本地環境,修改了本地ip端口和數據庫帳號密碼(使用了明文)。

然后項目一直跑不起來,還拋出各種異常,經過分析發現主要錯在這里:druid java.lang.IllegalArgumentException: Failed to decrypt.

解密失敗?哪里要解密?想了一下,原來的這么長的密碼是密文,現在被我改成了這么短的明文。

 

解決方案:

1、不使用密文

將數據庫配置中的<property name = "filters" value = "config" />刪除。如有value的值有多個(比如<property name="filters" value="stat,slf4j,config"/>),刪除其中的config。

 

2、使用密文(對明文加密)

找到maven本地庫druid的jar包所在路徑,該路徑下打開cmd命令窗口。

java -cp druid-1.0.27.jar com.alibaba.druid.filter.config.ConfigTools yourpassword

其中druid-1.0.27.jar替換成你的版本,yourpassword替換成你的密碼。

然后會出現

privateKey:MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEA1j7Oorws/mu2MmHl4qy/8wxpo+E6ypn/cfatwIrrblTw1m/KIHvlNug1JX7S/+6oH8flqLziLadu5FPtCAxD/QIDAQABAkBDPdkq2Dai73lynKlDGIbyKG4rgjAqkGTNBugHq1IzASC1UlSK/rfuKc7Az4ee/mS6X0LRdFoCL566fMUcX8PdAiEA8aMMrhCk22Zy26DJyD56BZ6tGyrhGqo+rtegUr22328CIQDi+vHHYDZjLWuRd69sbLlAqE819zQ9OFcNnHh295HdUwIhAJo/NfnrYAE57bnrcsNjtmrd9qyv+5AU+vyLYqlOt2z7AiEAnnbH+YPINLFvGd3PEQlOxD89HdX6GIuO6yfESnpI0ZUCIDB9bCRYKMI7KXx3l1dxVUVjwrW6kpeWMlAqdhV5gMl8

publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANY+zqK8LP5rtjJh5eKsv/MMaaPhOsqZ/3H2rcCK625U8NZvyiB75TboNSV+0v/uqB/H5ai84i2nbuRT7QgMQ/0CAwEAAQ==

password:d3hCh7tS8Fy9d0hpZ4AuaRx7tfusY1Db+7TGZeHuDNclWob24eqMgUpa0ZofLU/GXumb8qR0RLJfuGYDgK4cxQ==  

最后替換原來的密文和公鑰。

 

整體的數據庫配置展示:

<bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource" destroy-method = "close" >    
       <!-- 數據庫基本信息配置 -->  
       <property name = "url" value = "${url}" />    
       <property name = "username" value = "${username}" />    
       <property name = "password" value = "${password}" /> **主要看這里!!!** 第一  
       <property name = "driverClassName" value = "${driverClassName}" />    
       <property name = "filters" value = "config" /> **主要看這里!!!!**  第二
        <!-- 最大並發連接數 -->  
       <property name = "maxActive" value = "${maxActive}" />  
       <!-- 初始化連接數量 -->  
       <property name = "initialSize" value = "${initialSize}" />  
       <!-- 配置獲取連接等待超時的時間 -->  
       <property name = "maxWait" value = "${maxWait}" />  
       <!-- 最小空閑連接數 -->  
       <property name = "minIdle" value = "${minIdle}" />    
       <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 -->  
       <property name = "timeBetweenEvictionRunsMillis" value ="${timeBetweenEvictionRunsMillis}" />  
       <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->  
       <property name = "minEvictableIdleTimeMillis" value ="${minEvictableIdleTimeMillis}" />    
       <property name = "validationQuery" value = "${validationQuery}" />    
       <property name = "testWhileIdle" value = "${testWhileIdle}" />    
       <property name = "testOnBorrow" value = "${testOnBorrow}" />    
       <property name = "testOnReturn" value = "${testOnReturn}" />    
       <property name = "maxOpenPreparedStatements" value ="${maxOpenPreparedStatements}" />  
       <!-- 打開 removeAbandoned 功能 -->  
       <property name = "removeAbandoned" value = "${removeAbandoned}" />  
       <!-- 1800 秒,也就是 30 分鍾 -->  
       <property name = "removeAbandonedTimeout" value ="${removeAbandonedTimeout}" />  
       <!-- 關閉 abanded 連接時輸出錯誤日志 -->     
       <property name = "logAbandoned" value = "${logAbandoned}" />  
       <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${publicKey}" /> **還有這里!!!**第三
  </bean>  

 

參考:https://blog.csdn.net/woshfhsefksdf/article/details/54412375


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM