为保障安全,在我们生产环境中,可能会要求我们对密码进行加密操作,一起看看我们该如果操作。
1、pom.xml引入依赖
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.4</version> </dependency>
2、写一个main函数将我们的密码进行加密
public class JasyptTest { private static final Logger logger = LoggerFactory.getLogger(JasyptTest.class); public static void main(String[] args) { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); encryptor.setAlgorithm("PBEWITHHMACSHA512ANDAES_256"); encryptor.setPassword("zhi"); encryptor.setIvGenerator(new RandomIvGenerator()); // 加密 String encryptText = encryptor.encrypt("abc123"); logger.info("加密后的信息:{}", encryptText); // 解密 String decryptText = encryptor.decrypt(encryptText); logger.info("解密后的信息:{}", decryptText); } }
执行后输出:
abc123被加密成:+yFLnV9/k2Km3vpGHMDhYLVId+2tfWnpJT/r1H0vmYPPtjiInBnfmamEjUQkFD0V
注意:这里的加密方式需要与jasypt-spring-boot-starter保持一致,见下面的代码解读。
3、修改数据库配置参数
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/zhi_test?useSSL=false
spring.datasource.username=root
spring.datasource.password=ENC(I4gM5/FpHfeA7fW1fioYgBRjZRG5nHl1WEJhDbgm28YFgpndkb1HQR+846TrAFJt) #ENC()内的信息就上面加密信息
4、配置启动参数
因为数据库连接密码被加密,服务启动时我们必须将密文进行解密,解密参数如下:
jasypt.encryptor.password=zhi
1)可以将解密参数直接写到properties文件中(不推荐)
2)配置VM运行参数-Djasypt.encryptor.password=zhi
3)打成jar后我们可以在启动命令中添加参数
java -jar xxx.jar --jasypt.encryptor.password=zhi
代码解读:
1、jasypt配置类:JasyptEncryptorConfigurationProperties
2、jasypt-spring-boot-starter如何创建加密解密类,见StringEncryptorBuilder.build()方法