赞
踩
在Spring Boot项目中,配置文件中往往包含数据库的用户名和密码等敏感信息,如果不加保护直接上传到Git仓库并对外网开放,可能会导致严重的安全问题。本文介绍了如何使用Jasypt(Java Simplified Encryption)对这些敏感信息进行加密处理,从而提高项目的安全性。通过引入Jasypt依赖、配置加解密方法、在配置文件中使用加密后的密码,并在项目启动时提供加密密钥,我们可以有效地保护敏感信息。本文还详细讲解了Jasypt的工作原理以及如何在Spring Boot项目中集成和使用这一工具,同时提供了安全管理的建议,确保加密密码和其他敏感信息的安全性。
在Spring Boot项目中,配置文件中往往会包含数据库的用户名和密码等敏感信息。如果不加保护直接上传到Git仓库并对外网开放,后果不堪设想。本文将介绍如何使用Jasypt工具来加密这些敏感信息,从而提高项目的安全性。
Jasypt (Java Simplified Encryption) 是一个开源的Java加密工具库,旨在简化加密操作。通过使用Jasypt,我们可以轻松地对配置文件中的敏感信息进行加密和解密。
首先,在pom.xml
中添加Jasypt的依赖:
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
接下来,我们编写一个简单的单元测试来验证Jasypt的加解密功能:
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor; import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig; import org.junit.jupiter.api.Test; public class JasyptTest { @Test public void testEncryptionDecryption() { PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); SimpleStringPBEConfig config = new SimpleStringPBEConfig(); config.setPassword("123456"); // 加密密码 config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256"); // 加密算法 config.setKeyObtentionIterations("1000"); // 密钥获取迭代次数 config.setPoolSize("1"); config.setProviderName("SunJCE"); config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator"); config.setStringOutputType("base64"); encryptor.setConfig(config); String originalText = "hello ..."; String encryptedText = encryptor.encrypt(originalText); System.out.println("加密后: " + encryptedText); String decryptedText = encryptor.decrypt(encryptedText); System.out.println("解密后: " + decryptedText); } }
运行测试,我们可以看到:
加密后: nOvch7+afYNA0xcbPQq1yzmK0yLj7GmCQR6YpVFH61IkMnTEULVgJz2b2yU3DKbs
解密后: hello ...
我们可以在Spring Boot项目中使用Jasypt来加密配置文件中的敏感信息。首先,将配置文件中的明文密码替换为加密后的密码,并使用ENC()
包装:
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/scott?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
username: root
password: ENC(nOvch7+afYNA0xcbPQq1yzmK0yLj7GmCQR6YpVFH61IkMnTEULVgJz2b2yU3DKbs)
在启动项目时,需要通过启动参数传递加密密码:
-Djasypt.encryptor.password=123456
在Spring Boot项目中,可以在application.yml
或application.properties
文件中配置Jasypt:
jasypt:
encryptor:
password: ${JASYPT_ENCRYPTOR_PASSWORD}
algorithm: PBEWITHHMACSHA512ANDAES_256
key-obtention-iterations: 1000
pool-size: 1
provider-name: SunJCE
salt-generator-classname: org.jasypt.salt.RandomSaltGenerator
iv-generator-classname: org.jasypt.iv.RandomIvGenerator
string-output-type: base64
并确保在运行时通过环境变量提供加密密码,例如:
export JASYPT_ENCRYPTOR_PASSWORD=123456
Jasypt在启动时,会扫描配置文件中的属性值,判断是否以ENC(
开头并以)
结尾。如果是,则提取出其中的密文,并使用提供的加密密码和配置进行解密,将解密后的明文值注入到对应的属性中。在代码中通过如@Value("${spring.datasource.password}")
方式获取的将是解密后的明文。
通过以上方法,我们可以有效保护Spring Boot项目中的敏感信息,避免其在Git仓库中被暴露,提高项目的安全性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。