spring boot 通过 jasypt 实现配置文件密码加密,需引入 jasypt-spring-boot-starter 依赖,密钥必须外部注入(如命令行参数或环境变量),数据库密码用 enc() 包裹密文,运行时自动解密。

直接在配置文件里写明文数据库密码,等于把钥匙贴在门上。Spring Boot 本身不提供原生加密能力,但通过 Jasypt 可以做到“配置存密文、运行时自动解密”,业务代码完全不用改。
加依赖:引入 jasypt-starter
在 pom.xml 中添加:
<dependency><groupid>com.github.ulisesbocchio</groupid><artifactid>jasypt-spring-boot-starter</artifactid><version>3.0.5</version></dependency>
注意版本号,建议用 3.x 最新版(截至 2026 年仍主流),它兼容 Spring Boot 2.7+ 和 3.x,且默认启用更强算法。
配密钥:绝不写死在配置文件里
密钥必须外部注入,推荐两种安全方式:
- 启动时传命令行参数:
java -jar app.jar --jasypt.encryptor.password=MySecureKey2026 - Docker 或 Kubernetes 中设环境变量:
JASYPT_ENCRYPTOR_PASSWORD=MySecureKey2026
别用 application.yml 里写 jasypt.encryptor.password: xxx —— 这样密钥又变明文了,白忙一场。
生成并填入密文:ENC() 包裹才是标准格式
用 Jasypt 工具加密你的数据库密码(比如 myDbPass123):
- 命令行(Linux/macOS):
./encrypt.sh input=myDbPass123 password=MySecureKey2026 - 或 Java 工具类(确保算法一致):
PBEWITHHMACSHA512ANDAES_256
输出类似:4aFvX9kLqZtB+RcY...(一长串),然后填进配置文件:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: ENC(4aFvX9kLqZtB+RcY...)
注意:ENC() 大小写敏感,括号必须完整,不能漏掉。
验证与避坑要点
启动应用后,Jasypt 会自动拦截所有 ENC(...) 值并解密。常见问题排查:
- 报错
No decryption key found→ 检查密钥是否传入、变量名是否拼错(JASYPT_ENCRYPTOR_PASSWORD不是jasypt_encryptor_password,大小写和下划线要严格匹配) - 解密失败提示算法不支持 → JDK 版本低于 11?补全 JCE 无限强度策略,或降级用
PBEWithMD5AndDES(仅限测试环境) - 密码解密后仍连不上库 → 先确认原始明文密码本身正确,再检查加密/解密用的密钥和算法是否完全一致
密文只对运行时有效,不防源码泄露;真正安全靠的是密钥隔离 + 权限管控 + 审计日志,加密只是第一道锁。











