通常在编写代码的时候,数据库的用户名和密码以明文的方法写到配置文件中,系统运维为了保证一定的安全性,要求我们在配置文件中使用密文的方式存储,本文主要介绍使用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配置文件中数据库密码密文存储相关推荐

  1. mybatis 配置_配置Mybatis在Spring Boot工程中的整合

    配置Mybatis在Spring Boot工程中的整合包,设置mybatis的实体类别名,输出执行sql语句配置项. 分析: 添加启动器依赖: 配置Mybatis:实体类别名包,日志,映射文件等: 配 ...

  2. k8s部署jar包_学习K8S之路.6--- 在K8S中部署Jenkins,并使用Jenkins打包jar包

    一:部署jenkins jenkins官网:https://jenkins.io/download/ jenkins镜像:https://hub.docker.com/r/jenkins/jenkin ...

  3. 外部jar包_大数据系列之PySpark读写外部数据库

    本文以MySQL和HBASE为例,简要介绍Spark通过PyMySQL和HadoopAPI算子对外部数据库的读写操作 1.PySpark读写MySQL MySQL环境准备参考"数据库系列之M ...

  4. Spring Boot 配置文件中的花样,看这一篇足矣!

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 关注我,回复口令获取可获取独家整理的学习资料: - 001 :领取<Spring Boot基础教 ...

  5. spring boot 配置文件加密数据库用户名/密码

    这篇文章为大家分享spring boot的配置文件properties文件里面使用经过加密的数据库用户名+密码,因为在自己做过的项目中,有这样的需求,尤其是一些大公司,或者说上市公司,是不会把这些敏感 ...

  6. Spring Boot 动态设置数据库密码,密码加密,密码单独处理

    网上好多处理动态密码或密码加密都是用 [ jasypt ]与 阿里的 [ Druid ],但这些都无办法满足大部份的公司的安全要求,很多公司要求密码单独方在服务器上的一个地方,并且文件或者密码字符串被 ...

  7. Spring Boot 配置中的敏感信息如何保护?

    在之前的系列教程中,我们已经介绍了非常多关于Spring Boot配置文件中的各种细节用法,比如:参数间的引用.随机数的应用.命令行参数的使用.多环境的配置管理等等. 这些配置相关的知识都是Sprin ...

  8. springboot中文文档_登顶 Github 的 Spring Boot 仓库!艿艿写的最肝系列

    源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 My ...

  9. security面试_精选41 道 Spring Boot 面试题,附答案!

    今天跟大家分享下SpringBoot 常见面试题的知识. 1 什么是springboot ? 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件 ...

最新文章

  1. ORA-25155: NATURAL 联接中使用的列不能有限定词
  2. python3多线程----锁机制
  3. springmvc学习及源码地址
  4. (转)使用异步 I/O 大大提高应用程序的性能
  5. x_html语言名词解释,第2章++XHTML标记语言(97页)-原创力文档
  6. Dubbo注册中心宕机
  7. HashMap 详解
  8. eclipse怎么导入maven项目 eclipse导入maven项目详细教程
  9. Vuex 模块化与项目实例 (2.0)
  10. 到底梅西和C罗谁更强?分析7年大赛数据后,才知道谁在巅峰
  11. PAT Basic 1071. 小赌怡情(15)
  12. jdbc:mysql:replication_使用Mysql的Replication功能实现数据库同步
  13. 优云软件又双叒通过CMMI ML3评估 , 研发和质量管理水平创新高
  14. 【明解C语言】之函数详解《上篇》
  15. selenium chromedriver 下载地址
  16. PG使用 nlpbamboo chinesecfg 中文分词
  17. [MIT]微积分重点 第三课 极值和二阶导数 学习笔记
  18. 支付宝首页搜索栏淡出效果HTML,jQuery实现仿Alipay支付宝首页全屏焦点图切换特效...
  19. 云服务平台—恒源智享云
  20. Firefox,火狐about:config设置详解

热门文章

  1. C++ auto_ptr存在的问题
  2. github注册账号一直验证失败
  3. OpenCV鼠标事件和滑动条事件
  4. (Matlab函数详解)机器学习中的4种分类算法(LDA、QDA、SVM、KNN)
  5. QT中的QButtonGroup
  6. 6.MySQL数据库与数据表操作
  7. error LNK2019: 无法解析的外部符号 WinMain,该符号在函数 int __cdecl invoke_main(void)”中被引用
  8. WEB三大攻击之—XSS攻击与防护
  9. C++学习之路 | PTA乙级—— 1045 快速排序 (25 分)(精简)
  10. android系统签名app自动更新,【Android 进阶】Apk 使用系统签名