网站首页 > 编程文章 正文
通常在编写代码的时候,数据库的用户名和密码以明文的方法写到配置文件中,系统运维为了保证一定的安全性,要求我们在配置文件中使用密文的方式存储,本文主要介绍使用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。
生成密码密文和公钥信息如下图所示:
注意:无论使用哪种生成密码密文和公钥信息,生成的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: 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
猜你喜欢
- 2024-09-28 Spring Boot 面试,一个问题就干趴下了!
- 2024-09-28 3分钟搞定SpringBoot+Mybatis+druid多数据源和分布式事务
- 2024-09-28 Spring Boot面试中的一个精髓注解,不会就给淘汰
- 2024-09-28 Java高级架构师-Spring Boot(Spring的自动整合框架)
- 2024-09-28 主流Java数据库连接池分析(C3P0,DBCP,TomcatPool,BoneCP,Druid)
- 2024-09-28 SpringBoot + Mybatis + Druid + PageHelper 实现多数据源并分页
- 2024-09-28 maven-分布式项目之工程结构配置(maven工程目录结构)
- 2024-09-28 「深入浅出SpringBoot」了解Spring Boot自动配置原理
- 2024-09-28 SpringBoot整合RabbitMQ之整合配置篇
- 2024-09-28 聊聊druid的DestroyConnectionThread
你 发表评论:
欢迎- 06-24一个老爸画了超级有爱的365幅画 | 父亲节献礼
- 06-24产品小白看魏则西事件——用产品思维审视百度推广
- 06-24某教程学习笔记(一):13、脚本木马原理
- 06-24十大常见web漏洞——命令执行漏洞
- 06-24初涉内网,提权那些事(内网渗透提权)
- 06-24黑客命令第16集:47种最常见的**网站方法2/2
- 06-24铭说 | 一句话木马的多种变形方式
- 06-24Java隐藏的10倍效率技巧!90%程序员不知道的魔法方法(附代码)
- 最近发表
- 标签列表
-
- spire.doc (70)
- instanceclient (62)
- solidworks (78)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)