admin管理员组

文章数量:1639833

目录

  • 前言
  • 一、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
  • 也可以在 DruidDataSourceConnectionProperties中指定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 监控页面正常。


总结

整个流程实践下来还是很简单的。就两个步骤:密码加密和配置参数。

本文标签: 学习笔记密码数据库SpringBootdruid