springboot数据库密码加密推荐jasypt和druid两种方案:jasypt通用性强,支持配置文件任意敏感项对称加密,启动时自动解密enc()密文;druid则基于rsa非对称加密,专用于其数据源,需通过configtools生成密钥对并配置公钥解密。

直接把 spring.datasource.password 写成明文,等于把数据库钥匙挂在项目代码里——只要有人拿到 jar 包或配置文件,就能连库、查数据、删表。这不是“可能被攻击”,而是“随时可被利用”。真正有效的防护不是靠 obscurity(藏起来),而是让密码在运行前不以明文形态存在。
用 Jasypt 加密配置项,启动时解密
这是最轻量、侵入最小、Spring Boot 项目普遍落地的方式。核心是把密码字段替换成加密串,由 Jasypt 在 PropertySource 加载阶段自动解密。
- 加依赖:
org.jasypt:jasypt-spring5:1.9.3(Spring Boot 2.x)或jasypt-spring-boot-starter(Boot 3.x) - 加密命令必须和运行时算法一致:比如用
PBEWITHHMACSHA512ANDAES_256加密,启动时就得用相同 algorithm 参数,否则报Decryption of property failed - 密钥不能硬编码:通过
-Djasypt.encryptor.password=xxx或环境变量JASYPT_ENCRYPTOR_PASSWORD注入,严禁写进application.yml - 配置写法示例:
spring.datasource.password=ENC(/t8E+snZ4ODAwQU9gj0eA6MRnL98PHEGJVtOYN44wzmNKqHrY0TciomqfQg2qb2w),注意ENC(...)是固定前缀,括号内是 jasypt 命令输出的密文
Oracle Wallet:绕过密码字段,彻底消除明文凭证
这不是“加密密码”,而是“不用密码”——把用户名/密码存进加密容器,JDBC 驱动在连接时自动读取。适用于 Oracle 官方生态强约束场景,比如等保三级、金融类系统。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- Wallet 必须用 Oracle 自带
mkstore工具创建,Java 或 Keytool 生成的文件会报IO Error: Invalid wallet type - JDBC URL 必须是
jdbc:oracle:thin:/@mydb(开头/@),写成@mydb就退化为传统认证,直接触发ORA-01017 - 启动参数必须指定路径:
-Doracle.net.wallet_location=/opt/oracle/wallet,且该目录下只保留cwallet.sso(加密版),删掉ewallet.p12(未加密调试版) - Wallet 口令要强:至少 8 位含大小写字母+数字,否则暴力破解可在数小时内完成
环境变量 + 启动参数隔离敏感值
比 Jasypt 更底层、更可控的方式——配置文件里完全不出现密码字段,全靠外部注入。适合容器化部署或 CI/CD 流水线管理。
- 配置写成:
spring.datasource.password=${DB_PASSWORD},然后在docker run时用-e DB_PASSWORD=xxx,或 Kubernetes 中挂载Secret - 避免用
System.getProperty("DB_PASSWORD")手动读取:Spring Boot 会自动解析${...}占位符,手动读取容易漏掉类型转换或空值判断 - 禁止日志打印密码:检查所有
log.info("connecting with user={}, pwd={}", user, pwd)类语句,pwd 必须脱敏(如打星号)或禁用该行日志 - 警惕 JVM 参数泄露:
ps aux | grep java能看到完整启动命令,所以-DDB_PASSWORD=xxx这种方式在共享主机上不安全,优先选环境变量
真正难的不是选哪种方案,而是确保每种方案都堵住所有旁路:Jasypt 密钥没进 Git、Wallet 文件权限是 chmod 600、环境变量没被 env 命令暴露、日志没记明文密码——任何一个缺口,都等于没做。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










