应用不光保障功能完整性就可以了,还需要保障信息安全,所以我们还需要关注如何隐藏应用敏感信息的问题。数据库的账号密码就是这种信息,我们需要对其进行加密处理。正好druid又提供了非常好用的加密方案,让我们来看看如何使用吧。
我们首先需要补充点加密的概念,加密有两种方式(对称加密和非对称加密),对称加密就是一个秘钥进行加密和解密;非对称加密是一个秘钥对,分为私钥解密,公钥加密。显然非对称加密要更加安全,只给用户公钥。druid采用的是非对称加密。
有了加密概念,我们就开始研究怎么使用druid对密码进行加密。简单点,就干两件事情。
第一,生成秘钥对,并对密码进行加密;
@Test
public void test() throws Exception{
//密码
String password = "123456";
System.out.println("加密前的密码:"+password);
//生成秘钥对
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);
String decryptPassword=ConfigTools.decrypt(publicKey, password);
System.out.println("解密后的密码:"+decryptPassword);
}
第二,修改配置文件,配置公钥,打开加密设置。
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j,config
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true;config.decrypt.key=${app.datasource.publickey}
# 合并多个DruidDataSource的监控数据
spring.datasource.useGlobalDataSourceStat=true
# 公钥
app.datasource.publickey=MFwwDQYJKoZIhvcNAQEBB
然后将密码替换成加密后的密码,就大功告成了。
回顾总结,虽然加密整合的步骤非常简单,但是信息安全的意义确实巨大的,后续咱们还会利用这个加密机制,应用到更多的信息安全场景。