目录
- 前言
- 一、Druid的ConfigFilter
- 二、配置ConfigFilter
- 1.配置文件从本地文件系统中读取
- 2.配置文件从远程http服务器中读取
- 3.通过jvm启动参数来使用ConfigFilter
- 三、数据库密码加密
- 1.密码加密
- 2.重新配置数据源
- 总结
前言
之前在项目的配置文件中看到关于数据库的配置,总觉得将数据库用户名和密码赤裸裸的展现他人面前非常不好。但是技术有限,见识有限,不知道该如何处理。同时所看到的项目都是这个样子的,所以觉得就这个样子吧。在集成 Druid
数据库连接池时,在官网文档中偶然发现可以在 SpringBoot 项目的配置文件中给数据库密码加密,正合心意。这次就记录一下整个实现过程。
一、Druid的ConfigFilter
ConfigFilter
的作用包括:
- 从配置文件中读取配置
- 从远程
http
文件中读取配置 - 为数据库密码提供加密功能
前两个读取配置就直接贴原说明文档了,重点是数据库密码加密实践。
二、配置ConfigFilter
1.配置文件从本地文件系统中读取
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="filters" value="config" />
<property name="connectionProperties" value="config.file=file:///home/admin/druid-pool.properties" />
</bean>
2.配置文件从远程http服务器中读取
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="filters" value="config" />
<property name="connectionProperties" value="config.file=http://127.0.0.1/druid-pool.properties" />
</bean>
这种配置方式,使得一个应用集群中,多个实例可以从同一个地方读取配置,集中配置,集中修改,部署更简单。
3.通过jvm启动参数来使用ConfigFilter
DruidDataSource
支持 jvm
启动参数配置 filters
,所以你可以:
java -Ddruid.filters=config ....
三、数据库密码加密
数据库密码直接写在配置中,对运维安全来说,是一个很大的挑战。
Druid
为此提供一种数据库密码加密的手段ConfigFilter
。
1.密码加密
在命令行中执行如下命令:
java -cp druid-1.1.9.jar com.alibaba.druid.filter.config.ConfigTools 你的数据库密码
要执行上述命令,首先需要下载 druid-1.1.9.jar
,我直接将 druid-1.1.9.jar
丢到了 C:Users\liyaf
文件夹下,打开 CMD
,贴上命令,回车运行即可(红框处是你的数据库密码,还有就是 Java 配置了系统环境变量)。我们可以得到公钥,私钥和加密后的密码。
2.重新配置数据源
Druid
数据源需要对数据库密码进行解密,有三种方式配置,SpringBoot 项目直接选择第一种:
- 可以在配置文件
my.properties
中指定config.decrypt=true
- 也可以在
DruidDataSource
的ConnectionProperties
中指定config.decrypt=true
- 也可以在jvm启动参数中指定
-Ddruid.config.decrypt=true
# JDBC配置:
# JDBC驱动程序的完全限定名。默认情况下基于URL自动检测
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据库的JDBC URL
spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
# 数据库登录用户名
spring.datasource.druid.username=root
# 数据库登录密码(加密)
spring.datasource.druid.password=LWOFVDVOKzdH+PV/salzQTdpxApa7cXLNs07fvW/W7I4n1yZDndQz1FYQByzfr080tihAWRfY1bzy92EkvhxJg==
# 公钥
publickey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJX0QGFbKReek0aoC2fP7z/z808L/rvfvBV+c/3hU56TjGGAR+Ezsa9afZ1+BBZ52H0SQdVuir4GWNEHGLDwZZMCAwEAAQ==
# 配置 connection-properties,启用加密,配置公钥。
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${publickey}
# 启动ConfigFilter
spring.datasource.druid.filter.config.enabled=true
我们重启项目正常,访问 Druid
监控页面正常。
总结
整个流程实践下来还是很简单的。就两个步骤:密码加密和配置参数。