当前位置 : 主页 > 编程语言 > java >

SpringBoot2配置HikariCP连接池的密码保护

来源:互联网 收集:自由互联 发布时间:2022-10-26
本文讨论如何保护SpringBoot配置文件中的数据库连接信息,一般情况下application.properties里会如下配置DataSource: s p r i n g . d a t a s o u r c e . d r i v e r - c l a s s - n a m e = c o m . m y s q l . c j

本文讨论如何保护SpringBoot配置文件中的数据库连接信息,一般情况下application.properties里会如下配置DataSource:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db
spring.datasource.username=USERNAME
spring.datasource.password=PASSWORD

其中密码明文保存是很大的安全风险,需要在配置文件中以密文方式存储密码,然后连接池组件初始化时解密得到明文密码再使用。SpringBoot 2.X开始默认使用HikariCP作为数据连接池,HikariCP没有内置的加解密模块,需要我们自己实现,原理其实很简单,application.properties中没有配置spring.datasource.type,其默认值为com.zaxxer.hikari.HikariDataSource,我们只需要替换为自己的数据源即可。

从HikariDataSource继承一个自己的数据源:

package com.test.dao;

import com.zaxxer.hikari.HikariDataSource;

/**
* 支持自定义密码加解密的数据源
*/
public class EncHikariDataSource extends HikariDataSource {

@Override
public String getPassword() {
//得到application.properties中的密文密码
String password = super.getPassword();

//执行解密操作
//........

//返回解密后的明文密码
return password;
}
}

然后指定spring.datasource.type为自己的类:

spring.datasource.type=com.test.dao.EncHikariDataSource #
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db
spring.datasource.username=USERNAME
spring.datasource.password=ENC(PASSWORD) #

至于加解密算法可以完全自己选择。如果使用的不是HikariCP,原理也类似,找到对应的DataSource并通过继承重写其中与密码获取相关的方法即可。


上一篇:自学Java注意的问题
下一篇:没有了
网友评论