日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

兩步完成druid數(shù)據(jù)庫連接池的密文配置

作者:it夜貓who 更新時間: 2022-06-08 編程語言

?僅需兩步, 即可完成日常開發(fā)中數(shù)據(jù)庫連接池的密文配置.

 開發(fā)的同學(xué)都知道,數(shù)據(jù)源配置是必不可少的, 目前大多數(shù)使用的連接池也是明文密碼配置, 這樣的配置方式是存在一定的泄露風(fēng)險的, 比如在多項目并行的情況容易造成開發(fā)人員無意中的泄露,因此推薦使用密文配置賬號密碼.

項目環(huán)境:
spring-boot? 2.3.12.RELEASE
druid-spring-boot-starter 1.1.22

第一步: 使用druid自帶的工具類進行加密, 獲取加密密文和密鑰

    /**
     * 請把publicKey和password復(fù)制到配置文件中。
     * @throws Exception
     */
    @Test
    public void druidEncrypt() throws Exception {
        //java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.ConfigTools you_password
        String password = "123456";
        String[] arr = ConfigTools.genKeyPair(512);
        System.out.println("privateKey:" + arr[0]);
        System.out.println("publicKey:" + arr[1]);
        System.out.println("password:" + ConfigTools.encrypt(arr[0], password));
    }

第二步:修改配置文件,? 附密文配置樣例(目前已應(yīng)用)

spring:
  datasource:
    url: yourUrl
    #連接數(shù)據(jù)庫的用戶名
    username: yourname
    #連接數(shù)據(jù)庫的密碼。如果你不希望密碼直接寫在配置文件中,可以使用ConfigFilter。
    publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANRf3gpbZG0ja2Qi89aSlz1pR8YXvi2sSeg+SPXKixWjy8M6VVTevAnPuGBhIaSB0yRyYmWEmlnKBGziIwv9eYECAwEAAQ==
    password: RP9+tWLFVtcuV8tjnftPW8tw2Dh+AWlC/W+rvuMru4SdeTkUp1u1VKfSNTyQ1oXeppHR8YlzI+AZoOtwFbFcXw==
    #這一項可配可不配,如果不配置druid會根據(jù)url自動識別dbType,然后選擇相應(yīng)的driverClassName
    #driverClassName
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      # 連接池的配置信息
      # 初始化大小,最小,最大
      initialSize: 5
      maxActive: 15
      minIdle: 5
      # 配置獲取連接等待超時的時間
      maxWait: 60000
      # 是否緩存preparedStatement,也就是PSCache。PSCache對支持游標的數(shù)據(jù)庫性能提升巨大,比如說oracle。在mysql下建議關(guān)閉。
      poolPreparedStatements: false
      #要啟用PSCache,必須配置大于0,當(dāng)大于0時,poolPreparedStatements自動觸發(fā)修改為true。在Druid中,不會存在Oracle下PSCache占用內(nèi)存過多的問題,可以把這個數(shù)值配置大一些,比如說100
      maxPoolPreparedStatementPerConnectionSize: -1
      #用來檢測連接是否有效的sql,要求是一個查詢語句,常用select 'x'。
      validationQuery: select 'x'
      #單位:秒,檢測連接是否有效的超時時間。底層調(diào)用jdbc Statement對象的void setQueryTimeout(int seconds)方法
      validationQueryTimeout: 60
      #申請連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能。
      testOnBorrow: true
      # 歸還連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能。
      testOnReturn: true
      #建議配置為true,不影響性能,并且保證安全性。申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測連接是否有效。
      testWhileIdle: true
      #連接保持空閑而不被驅(qū)逐的最小時間
      #minEvictableIdleTimeMillis:
      #物理連接初始化的時候執(zhí)行的sql
      #connectionInitSqls:
      #當(dāng)數(shù)據(jù)庫拋出一些不可恢復(fù)的異常時,拋棄連接
      #exceptionSorter:
      #屬性類型是字符串,通過別名的方式配置擴展插件,常用的有stat,wall,slf4j
      filters: stat,slf4j,wall
      filter:
        config:
          enabled: true
      # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
      connectionProperties: config.decrypt=true;config.decrypt.key=${spring.datasource.publicKey};druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000

?

小結(jié): 1 加密密碼獲取公鑰, 2 修改配置文件.

關(guān)鍵配置屬性:

publicKey, password,? filter:config:enabled:true,?config.decrypt=true;config.decrypt.key=${spring.datasource.publicKey}

拓展: druid是使用RSA進行非堆成加解密的, 需要進一步了解的同學(xué)可以看看其在何時以及如何實現(xiàn).

?

原文鏈接:https://blog.csdn.net/YSOLA4/article/details/124505170

欄目分類
最近更新