美文网首页alreadyspringbootDruid
使用druid实现Spring boot配置文件中数据库密码密文

使用druid实现Spring boot配置文件中数据库密码密文

作者: 毛福林 | 来源:发表于2020-08-13 23:07 被阅读0次

    通常在编写代码的时候,数据库的用户名和密码以明文的方法写到配置文件中,系统运维为了保证一定的安全性,要求我们在配置文件中使用密文的方式存储,本文主要介绍使用druid实现数据库密码密文显示的方法。

    一、基本情况

    druid包中ConfigTools类提供了数据库密码加密的方式,使用非对称加密算法,在配置文件中配置加密后的密码密文和公钥信息,最终实现配置文件中无密文的内容。

    二、具体实现

    2.1 配置pom.xml文件

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid-spring-boot-starter</artifactId>
      <version>1.1.23</version>
    </dependency>
    

    在这里使用了最新的maven依赖版本,大家可以根据实际项目中选择自己项目使用的版本。

    2.2 密码生成工具类

    druid 提供2种方法生成配置文件中的公钥和密码密文,第一种使用命令行方式,第二种使用ConfigTools类的相关方法生成需要的参数。

    • 命令行方式:
      pom.xml文件中使用1.1.23版本的druid-spring-boot-starter,在maven本地仓库中找到对应的druid.jar包,直接执行以下命令:
    java -cp druid-1.1.23.jar com.alibaba.druid.filter.config.ConfigTools 1qaz@WSX
    

    其中, druid-1.1.23.jar替换为项目使用druid版本包,1qaz@WSX替换为数据库密码,
    具体执行示例如下:

    生成密码示例
    • ConfigTools类生成
      除了命令行的方式,可以通过自己编写java类,调用ConfigTools类相关的方法,生成配置文件中的公钥和密码密文,具体代码如下:
    public static void main(String[] args) throws Exception {
            String password = "你的密码";
            if(args.length >0){
                password = args[0];
            }
    
            System.out.println("密码[ " + password + " ]的加密信息如下:\n");
    
            String[] keyPair = ConfigTools.genKeyPair(512);
            // 私钥
            String privateKey = keyPair[0];
            // 公钥
            String publicKey = keyPair[1];
    
            // 用私钥加密后的密文
            password = ConfigTools.encrypt(privateKey, password);
    
            System.out.println("privateKey:" + privateKey);
            System.out.println("publicKey:" + publicKey);
            System.out.println("password:" + password);
            
            String decryptPassword = ConfigTools.decrypt(publicKey, password);
            System.out.println("decryptPassword:" + decryptPassword);
        }
    

    其中,需要加密的密码通过执行参数传入,如果传入参数为空,可使用默认密码变量password

    生成密码密文和公钥信息如下图所示:


    ConfigTools生成密码密文和公钥信息

    注意:无论使用哪种生成密码密文和公钥信息,生成的public-key与password的内容都不一样,以命令行的方式为例:

    每次生成密码密文和公钥对比信息
    红框内为公钥差异部分,密码密文完全不一致。

    2.3 修改配置文件

    spring.datasource.name=druidDataSource
    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    spring.datasource.url=jdbc:mysql://localhost:3306/spring_test?useSSL=true&serverTimezone=UTC
    spring.datasource.username=root
    spring.datasource.password=Dh6oG0SyuRnNC4x2iWy/oZC/JKBAOlay0CWSI05+zJ3j0DHtmF0ur4ehi1afpfEv553BX2iNJobv4KZT7I6dFg==
    
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.publicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKgSyG+YWhKXsRExCJA/1463YZeo7jC07bPg2kcgC3mCwhy6S5DPBD8wvinOWTiCt7JtDSZrSiyxEhVwwSzf7usCAwEAAQ==
    spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${spring.datasource.publicKey}
    

    参考资料

    1. 使用ConfigFilter

    2. 如何在Spring Boot中配置数据库密码加密?

    相关文章

      网友评论

        本文标题:使用druid实现Spring boot配置文件中数据库密码密文

        本文链接:https://www.haomeiwen.com/subject/vehwdktx.html