此处以mysql密码加解密为例,该方式使用druid支持对密码进行加密,所用算法:RSA/ECB/PKCS1Padding,也就是RSA算法
在项目pom文件中加入以下依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
1.application-druid.yml配置
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 主库数据源
master:
# driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.xxx:3306/project?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: dba
#password为加密后的密文,如何获取到该密码在步骤三有介绍
password: ZbUC5fNEM+KY4xswZlx623c9qSM/DF7wpIvG63lTwWcnKWmo9LHL4LHCYv/inoZbbopTA6I5OCy3WQ0xNqpd9w==
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 15000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true
#数据库密码加解密操作
filters:
config:
#是否启用数据库密码加密,true启用;false不启用
enabled: true
connect-properties:
config.decrypt: true
#spring.datasource.druid.publicKey需要作为参数在启动命令中添加详见步骤三
config.decrypt.key: ${spring.datasource.druid.publicKey}
2.DruidProperties添加如下代码
@Value("${spring.datasource.druid.filters.config.enabled}")
private boolean configFilterEnabled;
@Value("${spring.datasource.druid.connect-properties.config.decrypt}")
private String decryptEnabled;
@Value("${spring.datasource.druid.connect-properties.config.decrypt.key}")
private String decryptKey;
// dataSource 方法中添加
if (configFilterEnabled) {
try {
/* 启用数据库密码解密 */
datasource.setFilters("config");
Properties properties = new Properties();
properties.put("config.decrypt", decryptEnabled);
properties.put("config.decrypt.key", decryptKey);
datasource.setConnectProperties(properties);
} catch (Exception exception) {
exception.printStackTrace();
}
}
3.获取数据库加密后的密码
在druid-1.2.8.jar文件路径下打开cmd,输入如下命令,“My25#Dxm10Kz6”为数据库明文密码 ;“> pwd.txt”为运行命令后要输出内容到文件的名称
java -cp druid-1.2.8.jar com.alibaba.druid.filter.config.ConfigTools My25#Dxm10Kz6 > pwd.txt
输出的内容:
privateKey:MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEArV2ndV7QpTXhuMDVMiRnoibRq9wjgBWYEH2JGUs+0X5GeUIeBTEvlJhE1mQfqfh5evKDYJGdaVS+GnrQzmuH+QIDAQABAkEAqFxkTQKIQ3lBPSffo3NhRULHqkv+Gdxesd0H8I13cv/BfuinJGiApb/L8dVTuKukhKBQrl6nk7zVJxki8/XoJQIhAOI2naYwquLcniwHMGZe1fHFQ6OxpFDtT4X0yoRXS25vAiEAxDGchAmi+oFwzwFnRol2kUgeup51UD1eAh2kk9UzJBcCIQDc5PA05Lk6Jqzd2XdNv7WzDSnrowANdm59JHjNmmCySQIhALf3wUj6dE2rxKkHKt00lu6iDtZ1MZH9CUK4oxNQTnUfAiBOFG5Qyl3wUDQ/QUeN7zGDvXw1eC4WV1thOxfuaQmhFg==
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAK1dp3Ve0KU14bjA1TIkZ6Im0avcI4AVmBB9iRlLPtF+RnlCHgUxL5SYRNZkH6n4eXryg2CRnWlUvhp60M5rh/kCAwEAAQ==
password:Nz1eflga1mBixG6Rqcc0+vjj+WLdeCV0QEVQH5WGElCSUSB60t2H2+Sa6dMKmScy6tmzyXM/uxRC2A3S9EzQIQ==
包含三个内容:privateKey--私钥;publicKey--公钥;password--加密后的密码,需要配置到配置文件中,详见步骤1。其中公钥需要在启动jar包时,添加到启动命令中:
java -jar %JAVA_OPTS% project.jar --spring.datasource.druid.publicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAK1dp3Ve0KU14bjA1TIkZ6Im0avcI4AVmBB9iRlLPtF+RnlCHgUxL5SYRNZkH6n4eXryg2CRnWlUvhp60M5rh/kCAwEAAQ==
spring.datasource.druid.publicKey参数就是配置在配置文件中的,详见步骤1中最后一行代码
具体启动方式详见bat文件启动jar包