在 spring 引导中定义重要凭据的最佳方式

Best way define important credentials in spring boot

使用Spring启动应用程序时,我们根据不同的环境使用不同的application.properties文件。

我们放置了重要的凭据,例如:数据库配置、服务器 IP、管理员 username/password 等等。

我担心如果有人获得我们的应用程序属性并获得所有重要细节会发生什么。

有没有什么好的方法可以将重要的凭据放在某个地方并在我们的 Spring 基于环境的启动应用程序中获取它们?

您应该使用 spring 云配置。因为它最适合使用 git 存储库或任何类似的方式在中心位置管理配置。

一种解决方案是在应用程序属性中使用环境变量和 属性 占位符。比方说,您想存储数据库的密码。创建环境变量:

setx DEV_DB_PASS <your_dev_database_password>

现在,在应用程序属性文件中,您可以访问此值:

spring.datasource.password = ${DEV_DB_PASS}

可以参考official documentation.

很多技巧

  • 使用令牌替换(maven replacor)

    application.properties spring.datasource.password=#MY_DB_PASSWORD#
    tokens.properties #MY_DB_PASSWORD#=SECRET_PASSWORD

    其中 tokens.properties 具有访问保护

  • 使用环境变量
    mvn spring-boot:run -Dspring.datasource.password=SECRET_PASSWORD

    或者干脆
    spring.datasource.password=${myDbPasswordEnv}

  • 使用Jaspyt加密您的财产

请不要认为环境变量是隐藏的 - proc entry env 拥有这些由进程所有者拥有。默默无闻的安全性无济于事。

# ls -asl /proc/6475/environ 
0 -r-------- 1 karl karl 0 Sep 22 13:58 /proc/6475/environ