无论任何开发安全问题也是我们应该考虑的部分,除了数据接口层面的安全性,数据库用户名密码等敏感信息也是需要考虑安全问题,日常开发中大多数也习惯写明文,这样如果代码泄露数据库也面临较大威胁,本次将分享数据库用户名、密码如何在springboot项目中配置和使用
1 解决方案
解决上述问题其实比较简单,无非就是对数据库用户名和密码加密,但是可用的加密算法特别多,有对称加密的如DES、3DES(TripleDES)、AES、RC2、RC4、RC5和Blowfish等,不对称加密RSA等,但这些算法可能过于复杂,配合springboot也有些难度. 最后经查阅资料大部分都推荐我们使用jasypt ,这个加密算法的特点是每次对同一内容加密后的结果都不一样,但解密出来的结果却是一样的
2 配置
springboot也提供了相应支持,但是需要注意版本的对应关系,下面是有人整理的对应关系
https://blog.youkuaiyun.com/u013905744/article/details/86508236
pom增加下面的配置即可
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
yml文件也需要增加配置,只需配置一下jasypt的秘钥(盐值)即可
jasypt:
encryptor:
#加密秘钥
password: debugxwz
3 加密测试类、数据库连接配置
import org.jasypt.util.text.BasicTextEncryptor;
public class Test {
public static void main(String args[]){
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
//加密所需的salt(盐)
textEncryptor.setPassword("debugxwz");
//要加密的数据(数据库的用户名或密码)
String username = textEncryptor.encrypt("root");
String password = textEncryptor.encrypt("123456");
System.out.println("username:"+username);
System.out.println("password:"+password);
}
}
这里虽然加密了用户名和密码,但实际开发只加密密码也就ok了
spring:
datasource:
username: root
password: ENC(9hKt5abXFE4dTsZ8XfQEjw==)
#password: 123456
url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
driver-class-name: com.mysql.jdbc.Driver
这里需要注意ENC是大写,不能写错否则启动报错数据库也连不上,上述配置做完之后就弄好了,启动后日志如下: