Java REST API项目:如何避免在application.properties中明文配置密码?
避免在application.properties硬编码密码的可行方案
先贴出原配置示例:
spring.application.name=Facilities spring.datasource.url:jdbc:mysql://139.15.60.69:3306/project1 spring.datasource.username:user1 spring.datasource.password:XXXXXX spring.jpa.show-sql=true server.port:8083 spring.jpa.hibernate.ddl-auto=update
核心诉求
不想在application.properties里写密码,解决Git推送时的安全警告,同时避免开发时忘删密码的隐患,还要能适配云端打包部署的场景,以下是具体方案:
一、用环境变量替代硬编码
Spring Boot原生支持读取环境变量填充配置,操作简单:
- 修改
application.properties,把密码行改成环境变量引用:
spring.datasource.password=${DB_PASSWORD}
- 本地开发:
- Windows命令行:执行
set DB_PASSWORD=你的真实密码 - Linux/macOS终端:执行
export DB_PASSWORD=你的真实密码 - 嫌每次输麻烦的话,直接在IDE的运行配置里添加
DB_PASSWORD这个环境变量,一劳永逸
- Windows命令行:执行
- 云端部署:
直接在云服务的环境配置面板(比如Docker容器的环境变量、K8s的Secret/ConfigMap、云平台的应用配置页)里设置DB_PASSWORD,Spring Boot启动时会自动读取
这种方式彻底把密码和代码仓库分离,本地和云端都能灵活配置。
二、用Git Secrets拦截敏感信息提交
Git Secrets是Git钩子工具,能在你提交或推送代码时自动检测敏感内容,直接阻止违规提交,详细配置步骤:
- 安装Git Secrets:
- macOS:用Homebrew安装
brew install git-secrets - Linux:用包管理器,比如CentOS用
yum install git-secrets,Ubuntu用apt install git-secrets - Windows:用Chocolatey安装
choco install git-secrets,或者从官方仓库下载二进制文件
- macOS:用Homebrew安装
- 初始化项目仓库:
进到项目根目录,执行:
这会在项目的git secrets --install.git/hooks目录下添加检测钩子 - 添加自定义检测规则:
针对Spring的数据库密码,执行命令添加匹配规则:
也可以手动编辑项目下生成的git secrets --add 'spring\.datasource\.password=.*'.gitsecrets文件,添加更多敏感信息的匹配正则 - 全局配置(可选):
如果想让所有本地Git仓库都生效,执行:git secrets --install --global git secrets --add --global 'spring\.datasource\.password=.*' - 测试:
当你尝试提交包含硬编码密码的文件时,Git会直接报错并阻止提交,从根源上避免密码被推送到远程仓库
针对额外问题的解答
- 解决“推送前忘删密码”的隐患:
除了Git Secrets,还可以在IDE里装敏感信息扫描插件(比如IDEA的Secret Scanner),或者在项目的CI/CD流程里加一步敏感信息扫描,双重保险。 - 云端打包JAR时避免硬编码密码:
打包JAR的时候根本不需要把密码放进包里,只需要构建纯净的代码包就行,密码通过云端的Secret管理服务(比如各大云厂商的密钥管理工具)或者环境变量注入,Spring Boot启动时会自动读取这些外部配置,完全不需要在JAR里硬编码。
内容的提问来源于stack exchange,提问作者ckuthyar
相关产品推荐
相关产品推荐

