druid jar包_使用druid实现Spring boot配置文件中数据库密码密文存储

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

一、基本情况

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

二、具体实现

2.1 配置pom.xml文件

  com.alibaba  druid-spring-boot-starter  1.1.23

在这里使用了最新的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替换为数据库密码, 具体执行示例如下:

0c1c458446b246f9be92f2292c906d78

生成密码密文示例

  • ConfigTools类生成 除了命令行的方式,可以通过自己编写java类,调用ConfigTools类相关的方法,生成配置文件中的公钥和密码密文,具体代码如下:
public static void main(String[] args) throws Exception {        String password = "你的密码";        if(args.length >0){            password = args[0];        }        System.out.println("密码[ " + password + " ]的加密信息如下:");        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。

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

f5c46d5126fb47eda2e166fff8a2a9a0

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

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

7c0ff9741f9f4c8ca9422f730946f062

每次生成密码密文和公钥对比信息

红框内为公钥差异部分,密码密文完全不一致。

2.3 修改配置文件

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

参考资料

[1]

使用ConfigFilter: https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

[2]

如何在Spring Boot中配置数据库密码加密?: https://github.com/alibaba/druid/wiki/%E5%A6%82%E4%BD%95%E5%9C%A8Spring-Boot%E4%B8%AD%E9%85%8D%E7%BD%AE%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AF%86%E7%A0%81%E5%8A%A0%E5%AF%86%EF%BC%9F

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值