导读
虽然项目的源代码配置是在application.properties文件中,但是,如果使用的是明文账密,还是处于不安全状态,一旦泄露,将会造成不可计量的损失,故而使用一个加密来加密必要的信息,使得数据库更安全。
步骤
这里使用 jasypt-spring-boot-starter 来处理加密字符。官网详情点击查看。
1、导入依赖
<!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
2、生产加密数据
import org.jasypt.util.text.BasicTextEncryptor;
public class EncryptionTest{
public static void main(String[] args) {
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
//自定义加密所需的salt(盐值)
textEncryptor.setPassword("salt123456");
//要加密的数据(数据库的用户名或密码,当然你要是想让URL加密,也是可以的)
String username = textEncryptor.encrypt("root");
String password = textEncryptor.encrypt("123456");
System.out.println("username:" + username);
System.out.println("password:" + password);
}
}
每次启动生成的数据都不一样,这次启动控制台打印:
username:YxYODHKPIbPtwOBMdLbC7w==
password:RV+Z9VVoDTDZsccOpDsrdw==
Process finished with exit code 0
3、修改application.yml配置
# 数据库四大组件
spring:
datasource:
username: ENC(YxYODHKPIbPtwOBMdLbC7w==)
password: ENC(RV+Z9VVoDTDZsccOpDsrdw==)
url: jdbc:mysql://localhost:3306/dbtest?characterEncoding=UTF-8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
# 默认加密方式PBEWithMD5AndDES,可以更改为PBEWithMD5AndTripleDES,这里我选择的是默认的
jasypt:
encryptor:
password: salt123456 #你自定义的盐值
# algorithm: PBEWithMD5AndTripleDES
然后直接启动项目就OK了,测试,可以获取到相应的数据。
注意:如果怕盐值也泄露出去,你可以使用命令启动的时候传入进去盐值。
例如:
java -jar -Djasypt.encryptor.password=盐值 xxx.jar
完美解决。