如何在 Spring Boot 中安全读取账号密码等

在开发 Spring Boot 项目时,经常需要实现发送邮件的功能,例如用户注册的邮箱验证码、忘记密码邮件等。通常,邮箱账号和密码会写在配置文件 application.yml 中,但这样做存在安全隐患:

  • 敏感信息暴露:一旦提交到 Git 仓库,邮箱账号和密码就可能被泄露。
  • 多环境不灵活:开发、测试、生产环境可能使用不同邮箱,如果写死在配置文件里,每次都需要修改。

为了解决这个问题,我们可以将 邮箱账号和密码存放到环境变量 中,让 Spring Boot 从环境变量安全读取。下面详细说明操作步骤。


1️⃣ 在电脑/服务器上设置环境变量

Windows PowerShell

powershell 复制代码
setx MAIL_USERNAME "0811500009@163.com"
setx MAIL_PASSWORD "eagfsdcJssgXsa"

Linux / macOS

bash 复制代码
export MAIL_USERNAME="0811500009@163.com"
export MAIL_PASSWORD="eagfsdcJssgXsa"

⚠️ 设置好后,最好重新启动 IDE 或终端,让环境变量生效。


2️⃣ 修改 application.yml 使用占位符

在配置文件中使用 ${环境变量名} 形式占位,Spring Boot 会自动读取:

yaml 复制代码
mail:
  host: smtp.163.com
  username: ${MAIL_USERNAME}   # 从环境变量读取
  password: ${MAIL_PASSWORD}   # 从环境变量读取
  code:
    overtime: 5

这样就不用在配置文件里暴露邮箱账号和密码。


3️⃣ Java 代码里使用

通过 @ConfigurationProperties 注入配置:

java 复制代码
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "mail")
public class MailCodeConfig {
    private String host;
    private String username;
    private String password;
    private Code code;

    public static class Code {
        private int overtime;

        // getter / setter
    }

    // getter / setter
}

然后在代码里直接使用:

java 复制代码
String username = mailCodeConfig.getUsername();
String password = mailCodeConfig.getPassword();
相关推荐
mldong8 分钟前
工作流引擎的委托代批:一张单,两个办理人
后端·架构
高频因子挖掘机9 分钟前
量化回测为什么不能随便选前复权?从收益率计算到成交价格的三个误区
后端·github·api
高频因子挖掘机2 小时前
回测收益为什么可能不真实?从时间戳、数据可用性到未来函数检查
后端·github·api
howdoyoudo2026064 小时前
AI审计手记 #28:从“暂停训练”到“切断联网”——AI安全控制手段的极限升级
大数据·人工智能·安全·ai·语言模型
Joy T5 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
xiaohaiAIgeo8 小时前
【2026年】通风柜自动门安全吗?联锁逻辑与防夹设计
人工智能·安全·科普知识
m0_587383008 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·9 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
专注仿真9 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
怕浪猫9 小时前
2028编程圈很火的10个Skills
算法·面试·github