本文讨论如何保护SpringBoot配置文件中的数据库连接信息,一般情况下application.properties里会如下配置DataSource:
1 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 2 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db 3 spring.datasource.username=USERNAME 4 spring.datasource.password=PASSWORD
其中密码明文保存是很大的安全风险,需要在配置文件中以密文方式存储密码,然后连接池组件初始化时解密得到明文密码再使用。SpringBoot 2.X开始默认使用HikariCP作为数据连接池,HikariCP没有内置的加解密模块,需要我们自己实现,原理其实很简单,application.properties中没有配置spring.datasource.type,其默认值为com.zaxxer.hikari.HikariDataSource,我们只需要替换为自己的数据源即可。
从HikariDataSource继承一个自己的数据源:
1 package com.test.dao; 2 3 import com.zaxxer.hikari.HikariDataSource; 4 5 /** 6 * 支持自定义密码加解密的数据源 7 */ 8 public class EncHikariDataSource extends HikariDataSource { 9 10 @Override 11 public String getPassword() { 12 //得到application.properties中的密文密码 13 String password = super.getPassword(); 14 15 //执行解密操作 16 //........ 17 18 //返回解密后的明文密码 19 return password; 20 } 21 }
然后指定spring.datasource.type为自己的类:
1 spring.datasource.type=com.test.dao.EncHikariDataSource #指定自己的数据源 2 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 3 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db 4 spring.datasource.username=USERNAME 5 spring.datasource.password=ENC(PASSWORD) #此处改为密文
至于加解密算法可以完全自己选择。如果使用的不是HikariCP,原理也类似,找到对应的DataSource并通过继承重写其中与密码获取相关的方法即可。
原文地址:http://www.cnblogs.com/BoyTNT/p/16825439.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性