在Spring boot开发中,需要在application.yml文件里配置数据库的连接信息,或者在启动时传入数据库密码,如果不加密,传明文,数据库就直接暴露了,相当于"裸奔"了,因此需要进行加密处理才行。
如果使用@SpringBootApplication注解启动的项目,只需增加maven依赖,其他方式请参考如下GitHub地址的README信息:
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.2</version> </dependency>
我们对信息加解密是使用这个jar包的:
package com.test; import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig; import org.junit.Test; public class JasyptTest { @Test public void testEncrypt() throws Exception { StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor(); EnvironmentPBEConfig config = new EnvironmentPBEConfig(); config.setAlgorithm("PBEWithMD5AndDES"); // 加密的算法,这个算法是默认的 config.setPassword("密钥"); // 加密的密钥,必须为ASCll码 standardPBEStringEncryptor.setConfig(config); String plainText = "明文字符串"; String encryptedText = standardPBEStringEncryptor.encrypt(plainText); System.out.println(encryptedText); } @Test public void testDe() throws Exception { StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor(); EnvironmentPBEConfig config = new EnvironmentPBEConfig(); config.setAlgorithm("PBEWithMD5AndDES"); config.setPassword("密钥"); standardPBEStringEncryptor.setConfig(config); String encryptedText = "加密串"; String plainText = standardPBEStringEncryptor.decrypt(encryptedText); System.out.println(plainText); } }
加密串拿到了,现在来修改application.yml的配置,我们把加密串放在ENC(加密串)即可:
spring: datasource: driver-class-name: oracle.jdbc.driver.OracleDriver url: 数据库地址 username: 用户名 password: ENC(密码加密串)
还要在yml中加这个密钥的配置,在项目启动的时候,会根据密钥自动解密ENC(加密串)所代表的数据信息:
jasypt: encryptor: password: 密钥
文章参考于:https://www.cnblogs.com/yy123/p/11089417.html