序言:

在日常工作中,经常使用数据库明文密码放在配置文件中,java打的包很容易就会被例如360的一些压缩软件解析出来,导致数据库泄露。在此情况下选择使用druid自带的加密机制来对明文密码进行加密处理

1. 引入druid

        <!--  alibaba  druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.9</version>
        </dependency>

2. 密码加密工具

可以使用cmd进行操作,这里不做详细介绍

注意了,这里的公钥是解密,私钥是加密,和rsa加密相反

import com.alibaba.druid.filter.config.ConfigTools;
/**
 * 德鲁伊数据连接池数据库密码加密工具
 *
 * @author king
 * @date 2022-03-08
 */
public class DruidUtil {
 private static String PUBLIC_KEY = "";
    private static String PRIVATE_KEY = "";
    public static void main(String[] args) throws Exception {

        // 密码明文
        String password = "123456";
        System.out.println("password " + password);
        String [] keyPair = ConfigTools.genKeyPair(512);
        // 私钥
        PRIVATE_KEY = keyPair[0];
        // 公钥
        PUBLIC_KEY  = keyPair[1];
        // 用私钥加密后的密文
        password = ConfigTools.encrypt(PRIVATE_KEY, password);
        System.out.println("privateKey:" + PRIVATE_KEY);

        System.out.println("publicKey:" + PUBLIC_KEY);
		// 密文
        System.out.println("ciphertext:" + password);
        String decryptPassword = ConfigTools.decrypt(PUBLIC_KEY, password);
		// 原密码
        System.out.println("originalPassword" + decryptPassword);
    }

}

运行后的到的就是我们需要的公钥,私钥,密文
在这里插入图片描述

3. 配置文件

配置文件中不需要显示公钥,由${cloud.config.key}代替

在大部分博客以及度娘里,都把publicKey直接放在这里,这和皇帝的新衣有什么区别

#整体配置
cloud:
  config:
    url: jdbc:mysql://127.0.0.1:3306/work?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=UTC
    password: RpVa40F4UTcL5E3xPA8dOguuOJxb5LdvEFlj1nsOfkD7KNiwT9BTpHFUcAI7J1iw==
spring:
  application:
    name: server-stare
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      url: ${cloud.config.url}
      username: root
      password: ${cloud.config.password}
      #这里配置的是sql可合并、执行允许最大延时、可加密、加密key
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true;config.decrypt.key=${cloud.config.key} #加密

配置启动项

这里用的是idea

// 你自己的公钥
--cloud.config.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJE1uhesdQeAryXchQlZaMCb+jucaoSTFgY/UaWIdY9mRrn6hdahUL1NPSJjyTK5dv5ZUqjGe8+0CAwEAAQ==

将公钥放在启动项的program arguments里就可以啦
在这里插入图片描述

打包后启动

java -jar startApplication.0.0.1.jar --cloud.config.key='你的公钥'

看到这里是不是就熟悉了,和你使用的 --server.port=8080是不是一毛一样

最后

tomcat这里没研究,不做赘述。
在你写脚本文件启动项目的时候,不要在包旁直接放置脚本好吗

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐