在Spring Boot中保护敏感数据:YAML文件加密实战
在Spring Boot项目里,数据库密码、API密钥这类敏感信息,如果直接写在配置文件里,总让人心里不踏实。一旦代码仓库泄露,风险不言而喻。好在,我们有成熟的加密方案可以轻松集成,比如Jasypt。它提供的jasypt-spring-boot模块,能让你几乎“无感”地实现配置项的加密与自动解密。

具体怎么操作呢?其实流程非常清晰,跟着下面几步走,很快就能搞定。
1. 添加Jasypt依赖项
第一步,自然是把“工具”请进门。在你的Ma ven项目pom.xml文件中,加入以下依赖:
com.github.ulisesbocchio
jasypt-spring-boot-starter
3.0.3
2. 生成加密密钥
这是整个环节中最关键的一步。你需要一个密钥(Password)来执行加密和解密。可以使用Jasypt提供的命令行工具,或者在测试代码中临时生成。记住,这个密钥必须妥善保管,最佳实践是将其存储在环境变量或启动参数中,而不是写在项目配置文件里。
3. 加密敏感数据
拿到密钥后,就可以对敏感数据进行加密了。比如你的数据库密码是“mysecret”,加密后会得到一串类似“gDTpXqowB6P1rB7XpV3NKw==”的密文。随后,在application.yml文件中,你需要用ENC()包裹这串密文:
spring:
datasource:
password: ENC(gDTpXqowB6P1rB7XpV3NKw==)
4. 配置解密密钥
接下来,需要告诉Spring Boot解密时该用什么密钥。你可以在application.yml里直接配置,但更安全的做法是通过环境变量JASYPT_ENCRYPTOR_PASSWORD传入。如果选择写在配置文件里,格式如下:
jasypt:
encryptor:
password: your_encryption_key
这里的your_encryption_key,就是第二步生成的那个密钥。
5. 启用Jasypt自动配置
最后一步,在Spring Boot应用的主启动类上,加上@EnableEncryptableProperties注解。这个注解会激活Jasypt的自动配置机制。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
@SpringBootApplication
@EnableEncryptableProperties
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
完成以上步骤后,你的Spring Boot应用在启动时,就会自动识别并解密所有被ENC()包裹的配置值了。这样一来,配置文件本身可以安全地提交到版本控制系统,而真正的“秘密”则被牢牢保护起来。这无疑是兼顾开发便利性与安全性的一个优雅方案。
