springboot使用druid對配置文件數據庫密碼進行加密(starter版)

前言

最近一直在學習springboot和springcloud,自己把一些案例代碼給上傳到github上,這個時候發現一個問題:我配置文件中數據庫相關配置信息(數據庫用戶名,主機和數據庫密碼)不就直接給暴露出去了嗎,對於這個問題,如果真的在開發中肯定是不允許的。爲此查閱了一些資料,目前是有兩種解決方案:
1.使用jasyp庫
這種方法我在測試的時候運到一個問題,找不到解決方案,具體問題:在項目啓動時報錯:Failed to bind properties under ‘spring.datasource.password’ to java.lang.String‘,有可能是版本問題,大家有興趣可以自己去查詢資料嘗試。
2.使用druid自帶的密碼加密功能
我是直接參考github官方文檔去操作的:https://github.com/alibaba/druid/wiki/如何在Spring-Boot中配置數據庫密碼加密?

操作步驟

1.導入依賴包:版本可以按自己需要

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid-spring-boot-starter</artifactId>
     <version>1.1.20</version>
</dependency>
<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>8.0.18</version>
 </dependency>

2.進入maven倉庫找到druid-1.1.20.jar,進入cmd執行命令

java -cp druid-1.1.20.jar com.alibaba.druid.filter.config.ConfigTools  你的數據庫密碼

在這裏插入圖片描述
執行完後會在控制檯打印加密後的密碼以及公鑰私鑰字符串,記得保存下來

3.在項目文件中配置
(1)properties配置

server.port=8080

publicKey=上面生成的公鑰字符串

spring.application.name=CLOUD-DEPT-SERVER
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=上面生成的加密後的密碼
spring.datasource.druid.url=jdbc:mysql://localhost:3306/cloud?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-wait=60000
spring.datasource.druid.max-active=20
spring.datasource.druid.filter.config.enabled=true
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${publickey}

(2)yml配置

spring:
  application:
    name: CLOUD-DEPT-SERVER
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/cloud?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
      username: root
      password: 上面生成的加密後的密碼
      initial-size: 5
      max-active: 20
      max-wait: 60000
      min-idle: 5
      filter:
        config:
          enabled: true
      # 這裏有個坑
      connect-properties: {config.decrypt: true,config.decrypt.key: 上面生成的公鑰字符串}

這裏操作的時候我遇到一個問題:當使用yml配置文件後,啓動就會報錯Access denied for user ‘root’@‘localhost’ (using password: YES),排查後發現不是密碼和數據庫的問題,將yml換成properties又運行正常,最後找了半天是github官方文檔沒更新,配置connect-properties的時候要按上面的形式進行配置,這裏大家需要注意一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章