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替换为数据库密码, 具体执行示例如下:
生成密码密文示例
- 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。
生成密码密文和公钥信息如下图所示:
ConfigTools生成密码密文和公钥信息
注意:无论使用哪种生成密码密文和公钥信息,生成的public-key与password的内容都不一样,以命令行的方式为例:
每次生成密码密文和公钥对比信息
红框内为公钥差异部分,密码密文完全不一致。
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
druid jar包_使用druid实现Spring boot配置文件中数据库密码密文存储相关推荐
- mybatis 配置_配置Mybatis在Spring Boot工程中的整合
配置Mybatis在Spring Boot工程中的整合包,设置mybatis的实体类别名,输出执行sql语句配置项. 分析: 添加启动器依赖: 配置Mybatis:实体类别名包,日志,映射文件等: 配 ...
- k8s部署jar包_学习K8S之路.6--- 在K8S中部署Jenkins,并使用Jenkins打包jar包
一:部署jenkins jenkins官网:https://jenkins.io/download/ jenkins镜像:https://hub.docker.com/r/jenkins/jenkin ...
- 外部jar包_大数据系列之PySpark读写外部数据库
本文以MySQL和HBASE为例,简要介绍Spark通过PyMySQL和HadoopAPI算子对外部数据库的读写操作 1.PySpark读写MySQL MySQL环境准备参考"数据库系列之M ...
- Spring Boot 配置文件中的花样,看这一篇足矣!
点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 关注我,回复口令获取可获取独家整理的学习资料: - 001 :领取<Spring Boot基础教 ...
- spring boot 配置文件加密数据库用户名/密码
这篇文章为大家分享spring boot的配置文件properties文件里面使用经过加密的数据库用户名+密码,因为在自己做过的项目中,有这样的需求,尤其是一些大公司,或者说上市公司,是不会把这些敏感 ...
- Spring Boot 动态设置数据库密码,密码加密,密码单独处理
网上好多处理动态密码或密码加密都是用 [ jasypt ]与 阿里的 [ Druid ],但这些都无办法满足大部份的公司的安全要求,很多公司要求密码单独方在服务器上的一个地方,并且文件或者密码字符串被 ...
- Spring Boot 配置中的敏感信息如何保护?
在之前的系列教程中,我们已经介绍了非常多关于Spring Boot配置文件中的各种细节用法,比如:参数间的引用.随机数的应用.命令行参数的使用.多环境的配置管理等等. 这些配置相关的知识都是Sprin ...
- springboot中文文档_登顶 Github 的 Spring Boot 仓库!艿艿写的最肝系列
源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 My ...
- security面试_精选41 道 Spring Boot 面试题,附答案!
今天跟大家分享下SpringBoot 常见面试题的知识. 1 什么是springboot ? 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件 ...
最新文章
- ORA-25155: NATURAL 联接中使用的列不能有限定词
- python3多线程----锁机制
- springmvc学习及源码地址
- (转)使用异步 I/O 大大提高应用程序的性能
- x_html语言名词解释,第2章++XHTML标记语言(97页)-原创力文档
- Dubbo注册中心宕机
- HashMap 详解
- eclipse怎么导入maven项目 eclipse导入maven项目详细教程
- Vuex 模块化与项目实例 (2.0)
- 到底梅西和C罗谁更强?分析7年大赛数据后,才知道谁在巅峰
- PAT Basic 1071. 小赌怡情(15)
- jdbc:mysql:replication_使用Mysql的Replication功能实现数据库同步
- 优云软件又双叒通过CMMI ML3评估 , 研发和质量管理水平创新高
- 【明解C语言】之函数详解《上篇》
- selenium chromedriver 下载地址
- PG使用 nlpbamboo chinesecfg 中文分词
- [MIT]微积分重点 第三课 极值和二阶导数 学习笔记
- 支付宝首页搜索栏淡出效果HTML,jQuery实现仿Alipay支付宝首页全屏焦点图切换特效...
- 云服务平台—恒源智享云
- Firefox,火狐about:config设置详解
热门文章
- C++ auto_ptr存在的问题
- github注册账号一直验证失败
- OpenCV鼠标事件和滑动条事件
- (Matlab函数详解)机器学习中的4种分类算法(LDA、QDA、SVM、KNN)
- QT中的QButtonGroup
- 6.MySQL数据库与数据表操作
- error LNK2019: 无法解析的外部符号 WinMain,该符号在函数 int __cdecl invoke_main(void)”中被引用
- WEB三大攻击之—XSS攻击与防护
- C++学习之路 | PTA乙级—— 1045 快速排序 (25 分)(精简)
- android系统签名app自动更新,【Android 进阶】Apk 使用系统签名