当前位置: 首页 > article >正文

如何安全地管理Spring Boot项目中的敏感配置信息

在开发Spring Boot应用时,我们经常需要处理一些敏感的配置信息,比如数据库密码、API密钥等。以下是一个最佳实践方案:
在这里插入图片描述

1. 创建配置文件

application.yml(版本控制)

spring:
  datasource:
    url: ${MYSQL_URL:jdbc:mysql://localhost:3306/db_name}
    username: ${MYSQL_USERNAME:root}
    password: ${MYSQL_PASSWORD:}
  
  redis:
    host: ${REDIS_HOST:localhost}
    port: ${REDIS_PORT:6379}
    password: ${REDIS_PASSWORD:}

application-local.yml(本地开发,不进入版本控制)

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/my_local_db
    username: dev_user
    password: dev_password
  
  redis:
    host: localhost
    port: 6379
    password: local_redis_pass

在这里插入图片描述

  • 新创建application-local.yml,可能会自动加入git 管理,这里选择回滚为了保证这个文件不加入git 管理。

2. 配置.gitignore

将以下内容添加到.gitignore文件:

# 忽略本地配置文件
application-local.yml

在这里插入图片描述

3. 最佳实践说明

  1. application.yml 作为默认配置文件:

    • 包含所有配置项的模板
    • 使用环境变量占位符
    • 提供默认值
    • 可以提交到版本控制系统
  2. application-local.yml 作为本地开发配置:

    • 包含实际的本地开发环境配置
    • 包含敏感信息
    • 添加到.gitignore,不提交到版本控制系统
  3. 在开发环境中:

    • 开发人员可以根据自己的本地环境创建和修改application-local.yml
    • 每个开发人员可以有自己的本地配置,互不影响
  4. 在生产环境中:

    • 使用环境变量或外部配置系统提供实际的配置值
    • 不需要application-local.yml文件

4. 使用方法

  1. 克隆项目后,复制application.yml为application-local.yml
  2. 在application-local.yml中填入本地开发环境的实际配置
  3. 确保application-local.yml已在.gitignore中
  4. 启动应用时,Spring Boot会自动合并这两个配置文件

http://www.kler.cn/a/532844.html

相关文章:

  • 【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发三
  • 洛谷 P1387 最大正方形 C语言
  • 如何不更新application.yml而更新spring的配置
  • 深入解析 clone():高效的进程与线程创建方法(中英双语)
  • 【axios二次封装】
  • 使用Pygame制作“吃豆人”游戏
  • C#中的if判断语句详解
  • DeepSeek本地部署的一些使用体会
  • Linux 系统上安装 Docker 并进行配置
  • OpenAI新商标申请曝光:AI硬件、机器人、量子计算全线布局?
  • 【Linux】解决 apt-key 弃用问题:GPG 直接管理密钥代替 apt-key
  • 蓝桥杯python基础算法(2-2)——基础算法(D)——进制转换*
  • 【异常记录Java-20250204】调用讯飞星火AI(Spark lite 版本)Api 授权错误问题处理
  • 电子电器架构 --- 电子电气架构设计要求与发展方向
  • 【怎么用系列】短视频戒除—1—对推荐算法进行干扰
  • 2.6学习记录
  • 结合深度学习、自然语言处理(NLP)与多准则决策的三阶段技术框架,旨在实现从消费者情感分析到个性化决策
  • Autosar-以太网是怎么运行的?(原理部分)
  • Node.js 调用 DeepSeek API 完整指南
  • java使用pcap4j进行报文发送和接收
  • Go语言指针的解引用和间接引用
  • 深入理解Node.js_架构与最佳实践
  • static成员变量的本质?静态变量?静态类有什么意义?全局变量?类函数?
  • DeepSeek最新图像模型Janus-Pro论文阅读
  • 落地 dnn对象检测
  • 【BUUCTF杂项题】面具下的flag