文章目录
- 实现原理
- EncDataSourceInitEvent 类与 DataSourceInitEvent 接口
- 配置 DataSourceInitEvent 为 Bean
- 使用案例
- 第 1 步:使用私钥加密
- 第 2 步:在 YAML 中使用 ENC(xxx) 配置
- 相关文章
🗯️ 上节回顾:前节中,了解了 dynamic-datasource 的懒加载/初始化 SQL/无数据源启动。
👉 本节目标:了解 dynamic-datasource 的进阶用法 - 数据库加密。
数据库加密:指数据库的 url, username, password 需要加密。常用于安全性较高系统,不让普通开发通过配置知道生产库的连接配置。
实现原理
有些项目中,对数据库连接的关键字段有加密需求。比如常见的 Druid 就有此加密功能。
dynamic-datasource 复制了 Druid 的加密功能。简单来说,就是私钥加密,公钥解密。私钥自己拿着,公钥发布出去,公钥配置在程序中,用于解密。
使用步骤:
- 1️⃣ dynamic-datasource 使用 CryptoUtils 实现 RSA 加解密
- 2️⃣ 然后在配置文件中使用 ENC(xxx) 替换掉明文(xxx 是密文)
- 3️⃣ 最后在创建 DataSource 前使用
EncDataSourceInitEvent
类调用CryptoUtils.decrypt(publicKey, 密文)
解密
EncDataSourceInitEvent 类与 DataSourceInitEvent 接口
EncDataSourceInitEvent
类 是 DataSourceInitEvent
接口的实现类。
package com.baomidou.dynamic.datasource.event;
import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
import javax.sql.DataSource;/*** 多数据源连接池创建事件*/
public interface DataSourceInitEvent {/*** 连接池创建前执行(可用于参数解密)** @param dataSourceProperty 数据源基础信息*/void beforeCreate(DataSourceProperty dat