springboot利用druid加密数据库配置文件

废话不多说,直接上。避免裸奔最简单的方法。

给数据库配置加密的方式有使用ulisesbocchio进行加密的。但是我认为正常情况下,我们会使用druid连接池,直接使用druid进行加密就好了。避免增加依赖也是一个程序员该有的觉悟。

依赖:

<!-- druid数据源驱动 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

加密方案:

    1、执行命令加密数据库密码

java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.ConfigTools you_password

    输出:

privateKey:MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEA6+4avFnQKP+O7bu5YnxWoOZjv3no4aFV558HTPDoXs6EGD0HP7RzzhGPOKmpLQ1BbA5viSht+aDdaxXp6SvtMQIDAQABAkAeQt4fBo4SlCTrDUcMANLDtIlax/I87oqsONOg5M2JS0jNSbZuAXDv7/YEGEtMKuIESBZh7pvVG8FV531/fyOZAiEA+POkE+QwVbUfGyeugR6IGvnt4yeOwkC3bUoATScsN98CIQDynBXC8YngDNwZ62QPX+ONpqCel6g8NO9VKC+ETaS87wIhAKRouxZL38PqfqV/WlZ5ZGd0YS9gA360IK8zbOmHEkO/AiEAsES3iuvzQNYXFL3x9Tm2GzT1fkSx9wx+12BbJcVD7AECIQCD3Tv9S+AgRhQoNcuaSDNluVrL/B/wOmJRLqaOVJLQGg==
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOvuGrxZ0Cj/ju27uWJ8VqDmY7956OGhVeefB0zw6F7OhBg9Bz+0c84RjzipqS0NQWwOb4kobfmg3WsV6ekr7TECAwEAAQ==
password:PNak4Yui0+2Ft6JSoKBsgNPl+A033rdLhFw+L0np1o+HDRrCo9VkCuiiXviEMYwUgpHZUFxb2FpE0YmSguuRww==

    2、配置一个加密使用的util方法

import com.alibaba.druid.filter.config.ConfigTools;
import org.junit.Test;

/**
 *数据库配置加密使用
 * 修改password字符串为对应的密码输出
 * copy对应的publicKey放在yml中对应useName中的publicKey和key
 * copy对应的password到对应的password
 * @author matthew
 */
public class EncryptPwdUtilTest {

    @Test
    public void EncryptPwdUtil() {
        try {
            String password = "pwd";
            String[] arr = ConfigTools.genKeyPair(512);

            System.out.println("publicKey:" + arr[1]);
            System.out.println("password:" + ConfigTools.encrypt(arr[0], password));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

然后将对应publickey和password放在配置文件的对应位置。

使用properties进行配置

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
# 加密后的密码(原密码 123456)
spring.datasource.password=WVMjPhfXQrIsWRo0/RCqAVvYtTU9WNVToKJohb8AlUmHwnV6vwFL+FM2CNFDMJwGHW1iCmyaUlF+sgvFdogqEA==
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 公钥
publickey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIiwHpFrDijV+GzwRTzWJk8D3j3jFfhsMFJ/7k1NTvBuLgL+TdIHgaMNOIEjHpXzuvX38J3FtOK8hLrySncVGOMCAwEAAQ==
# 配置 connection-properties,启用加密,配置公钥。
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${publickey}
# 启动ConfigFilter
spring.datasource.druid.filter.config.enabled=true

或者使用yml配置

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    sql-script-encoding: utf-8
    driverClassName: com.mysql.jdbc.Driver
    druid:
      url: jdbc:mysql://47.106.188.177:3306/rs_new?useUnicode=true&characterEncoding=utf8&useServerPstmts=true&cachePrepStmts=true&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&cacheCallableStmts=true&connectTimeout=1000&maxReconnects=5&zeroDateTimeBehavior=convertToNull&useSSL=true
      username: root
      password: dm/EBMW25AZuDlvuyJe4HIaEVgiFCVRXvBSxwC9c4TUbPRP0YnuADJZvN6YuzEcmj4STFt6EHnBWH16qRHmPpg==
      publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJIMmD5aAT19WqTrqF5LXWP+dDOy8kuRDWmXBdmJgz+m2AbMSIixrj/t4rnOFl8GM4hYTvX1ATvDp/9M9LtvUXUCAwEAAQ==
      connection-properties: config.decrypt=true;config.decrypt.key=${publickey}
      # 初始连接数
      initialSize: 10
      # 最大连接池数量
      maxActive: 50
      # 最小连接池数量
      minIdle: 10
      # 配置获取连接等待超时的时间
      maxWait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      minEvictableIdleTimeMillis: 300000
      # 配置一个连接在池中最大生存的时间,单位是毫秒
      maxEvictableIdleTimeMillis: 900000
      # 配置检测连接是否有效
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      webStatFilter:
        enabled: true
      statViewServlet:
        enabled: true
        url-pattern: /monitor/druid/*
      filter:
        config:
          enabled: true
        stat:
          enabled: true
          log-slow-sql: true
          slow-sql-millis: 1000
          merge-sql: false
        wall:
          config:
            multi-statement-allow: true
        log4j:
          statement-logger-name:

猜你喜欢

转载自blog.csdn.net/mathew_leung/article/details/99675831