SpringBoot(七)SpringBoot整合Druid实现数据库密码加密
文章目录
- SpringBoot(七)SpringBoot整合Druid实现数据库密码加密
- 1、新建一个Maven项目
- 1.1、项目结构树
- 1.2、项目结构图
- 2、创建加解密程序
- 2.1、DecryptDruid
- 2.2、生成公钥和密码
- 3、配置我们的项目
- 3.1、配置application.properties文件
- 3.2、启动项目并验证
我们在实际的生产环境中为了防止数据库的密码被直接读取,经常需要将密码加密存储;
本文介绍了使用SpringBoot整合Druid时,将密码使用非对称的方式进行加密的过程
用以防止密码被人直接窃取
1、新建一个Maven项目
使用IDEA按照提示,创建一个普通的maven项目,如下:
1.1、项目结构树
├── druid_decrypt.iml
├── pom.xml
├── src
│ ├── main
│ │ └── java
│ └── test
│ └── java
└── target
1.2、项目结构图
2、创建加解密程序
2.1、DecryptDruid
编写一个类
DecryptDruid
,里面需要包含一个加密方法testEncrypt
和一个解密方法testDecrypt
,并增加一个
main
方法,生成公钥和密文密码全部代码如下:
package com.iambest.study;
import com.alibaba.druid.filter.config.ConfigTools;
/**
*
* Druid的公钥
*
* @author zhang_wei
* @version 1.0.0
* @Classname DecryptDruid
* @Date 2021/3/7 20:37
* @Created by zhang_wei
* @since 1.0.0
*/
public class DecryptDruid {
public static void main(String[] args) throws Exception {
testEncrypt("123456");
}
/**
* 对指定的密码使用公钥进行解密
*
* @param passwd 加密后的密码
* @param publicKey 公钥
* @return 解密后的明文密码
* @throws Exception 異常
*/
public static String testDecrypt(String passwd, String publicKey) throws Exception {
// 解密
String decryptPassword = ConfigTools.decrypt(publicKey, passwd);
System.out.println("decryptPassword:" + decryptPassword);
return decryptPassword;
}
/**
* 对指定的明文密码,生成公私钥进行加密
*
* @param password 明文密码
* @return 密文密码
* @throws Exception 異常
*/
public static String testEncrypt(String password) throws Exception {
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);
// 解密操作
testDecrypt(password, publicKey);
return password;
}
}
2.2、生成公钥和密码
运行
DecryptDruid
的main
方法,查看控制台输出这里可以正常的输出公钥、密文的密码
解密也可以正常的解密成功
表示正常执行
3、配置我们的项目
3.1、配置application.properties文件
修改密码这里,将密码改为密文,增加一个公钥publickey
spring.datasource.url=jdbc:mysql://localhost:3306/david?useUnicode=true&characterEncoding=UTF8
spring.datasource.username=root
spring.datasource.password=S9dS2DkBSLKUm03DmDwT6r4JaehHN2M0/1c8ZQdcCtw6KcwS1LBXsSsOnGG7WWhpkkUDdvyvkgNKQnNDd4/qTQ==
publickey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJYK7hVI7KPgskMIzfk+Wayo69bT0AKxU+fbLiZze7AwkzY2xuzqezZQe45yt2BeGZoDtpGdMh6al9MiNXhNaDMCAwEAAQ==
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
调整
spring.datasource.druid.filters
增加一个config
配置项调整
spring.datasource.druid.connection-properties
在后面追加config
的配置完整的配置如下:
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.druid.filters=stat,slf4j,config
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true;config.decrypt.key=${publickey}
3.2、启动项目并验证
我们启动自己的项目,查看控制台的输出
可以看到我们的数据库连接池正常的