如何在Spring Boot应用中安全隐藏数据库凭据?
Spring Boot 3.0.5数据库凭据安全隐藏解决方案
问题场景
用Spring Boot 3.0.5在Ubuntu系统的IntelliJ IDEA中开发,想把application.properties里的数据库用户名、密码安全隐藏。之前试过在~/.zshrc里设置DB_USERNAME、DB_PASSWORD环境变量,配置文件里用${DB_USERNAME}引用,但运行时环境变量没被识别,触发数据库连接权限错误。临时用脚本设置环境变量能解决问题,但测试场景下用着太麻烦,需要更靠谱的方案。
推荐方案:Jasypt加密数据库凭据
用Jasypt加密是Spring Boot项目中隐藏敏感配置的常用方案,操作步骤如下:
1. 添加Jasypt依赖到pom.xml
先把Jasypt的Spring Boot Starter依赖加到项目的pom.xml里,适配Spring Boot 3.0.5的版本可以用3.0.5:
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.5</version> </dependency>
2. 用Maven命令加密明文凭据
在项目根目录打开终端,执行Maven命令加密你的数据库用户名和密码。比如要加密密码your_db_password,加密密钥用your_secure_key(记得换成自己的安全密钥):
mvn jasypt:encrypt-value -Djasypt.encryptor.password=your_secure_key -Djasypt.plugin.value=your_db_password
执行完成后会输出加密后的字符串,格式是ENC(xxxxxx...),把这个字符串保存好。
3. 在IDEA中配置VM参数
启动Spring Boot应用时,需要把加密密钥通过VM参数传给应用:
- 打开IDEA的「Run/Debug Configurations」
- 在「VM options」输入框中添加:
-Djasypt.encryptor.password=your_secure_key
注意这里的密钥要和加密时用的完全一致。
4. 修改application.properties配置
把原来的明文用户名、密码替换成加密后的字符串,同时可以根据需要配置Jasypt的加密算法(默认配置也能正常用):
# 数据库配置 spring.datasource.username=ENC(加密后的用户名字符串) spring.datasource.password=ENC(加密后的密码字符串) # 可选:自定义Jasypt加密配置 jasypt.encryptor.algorithm=PBEWithMD5AndDES jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator
补充:环境变量配置的正确姿势(解决之前失效问题)
之前在~/.zshrc配置环境变量没生效,大概率是IDEA没读取到终端的环境变量。可以用这两种方法解决:
- 从终端启动IDEA:在Ubuntu终端执行
nohup idea.sh &,这样IDEA会继承终端的环境变量,配置文件里的${DB_USERNAME}就能正常识别。 - 直接在IDEA配置环境变量:
- 打开「Run/Debug Configurations」
- 找到「Environment variables」选项,点击加号添加:
DB_USERNAME=你的数据库用户名DB_PASSWORD=你的数据库密码
- 配置文件里保持原来的引用方式即可:
spring.datasource.username=${DB_USERNAME} spring.datasource.password=${DB_PASSWORD}
这种方式在测试场景下直接用,不用每次跑脚本。
内容的提问来源于stack exchange,提问作者EDOYou
相关产品推荐
相关产品推荐

