Configuration Playframework 2-存储您的凭据

Configuration Playframework 2-存储您的凭据,configuration,playframework-2.0,credentials,Configuration,Playframework 2.0,Credentials,您在哪里存储您的凭据,如密钥、邮件密码、数据库密码 我在网上发了一个帖子 存储凭据的最佳方式似乎是在外部服务器上 但是play2使用application.conf来实现这一点 那么,在play2中如何以及在何处存储凭据呢 更新1: 好的,我在用heroku 我将环境变量设置为: heroku config:add test=ITWORKS Logger.info(Play.application().configuration().getString("sometest")); 在ap

您在哪里存储您的凭据,如密钥、邮件密码、数据库密码

我在网上发了一个帖子

存储凭据的最佳方式似乎是在外部服务器上

但是play2使用application.conf来实现这一点

  • 那么,在play2中如何以及在何处存储凭据呢
更新1:

好的,我在用heroku

我将环境变量设置为:

heroku config:add test=ITWORKS
Logger.info(Play.application().configuration().getString("sometest"));
在application.conf中,我添加了

sometest=${test}
我尝试这样访问它:

heroku config:add test=ITWORKS
Logger.info(Play.application().configuration().getString("sometest"));
但我得到了以下错误:

UnresolvedSubstitution: conf\application.conf: 54: Could not resolve substitution to a value: ${test}
我猜play2找不到变量测试,因为它在heroku上。但是我也在本地windows环境中添加了它->仍然是相同的错误

你知道怎么了吗

更新2:

好的,它可以工作,我只需要在添加一个env变量后重新启动

最后一个问题:


每次在本地机器上添加系统变量都有点烦人。是否有开发模式?

application.conf
支持环境变量,例如
db.default.user=${db\u user}
。您可以将其作为控制台参数传递(这是不安全的,因为它出现在
ps
中),或者更安全地将其设置为环境变量

在Heroku上,通过
Heroku config
设置环境变量,例如
Heroku config:add DB\u USER=MyDBAdmin


您可以通过
export DB\u USER=MyDBAdmin
在本地设置它们,或者将它们添加到您的
~/.bash\u配置文件中(如果您使用bash)。

广告。3:正在播放
应用程序。conf
不能通过任何
路由或其他类型的
路径访问,因此不能将其视为“放置在webroot中”。Terry的建议在PHP中是正确的,但不适合使用(他警告说,他当然不知道框架)。他给出了一个PHP脚本示例,但相信我,访问
http://somdomain.tld/config.php
和Play的
conf/application.conf
很大。它们不能直接比较

application.conf
中存储凭证是目前最安全(也是最快)的方法,我无法想象在浏览器中反编译文件的方法,即使解析器会死掉(这是不可能的,因为它不是PHP)。如果您决定将凭据存储在某个遥远的位置,您将面临新的风险,因为您需要额外检查客户端是否有权获取配置,应用程序启动所需的时间是否会增加等等

更新1:

使用环境变量不是一种安全的方式——正如马吕斯所指出的,它将出现在进程列表中,因此您将向每个管理员显示您的凭据,我很确定您不希望在ie中使用您的电子邮件

当然,在Heroku中,这是传递他们的DB连接URL的一种方式,但是其他凭证应该存储在配置文件中。最后请记住,将所有凭证放入其中会导致应用程序某天无法启动

本例中的解决方案是使用,场景非常简单

  • application.conf
    中,如果生产数据库很可能是Heroku
    db.default.user
    db.default.password
    ,则应保留一个指向该数据库的URL,因为公共Heroku URL中包含凭据
  • 为您的本地版本创建一个文件,即:
    conf/local\u postgres.conf
    include application.conf,并覆盖/添加所有必需的配置密钥,如本地postgres数据库中的凭据。此外,您还可以设置其他内容,更改日志记录级别,启用
    smtp.mock
    ,等等
  • 使用此配置在本地运行您的应用程序(注意,我在
    -Dconfig.resource
    方面遇到一些问题,因此我不得不使用
    -Dconfig.file
    语法,您必须找到哪个方法在您的系统中运行良好)

    提示:使用非默认端口是“演示”您正在使用本地配置的最简单方法。如果您忘记了您有备用配置,并将使用common
    play~run
    命令启动您的应用程序,您的应用程序将位于
    http://localhost:9123
    将不可用

  • 创建一个bash脚本
    runlocal
    (或者在Windows中创建
    runlocal.bat
    文件),并从上一点开始将命令放在那里。在
    .gitignore
    文件中忽略它

  • 从现在起,您将使用第4点的脚本运行本地开发应用程序。当推到Heroku时,它将使用
    application.conf
    中的值部署您的应用程序,因为您没有在Procfile中设置可选配置。更重要的是,通过一些其他组合,您可以使用Heroku的SQL在本地运行您的应用程序,以执行演进,而无需将其推到部署,或者检查最新的修复包。当然,您必须始终确保您是在本地版本的数据库上开发的,否则您可能会意外更改/破坏您的生活数据

    更新2:

    最后,使用
    *.conf
    文件比将其存储在单独的类中要好,以防您必须更改不同位置的配置(如前所述,使用相同代码的团队、开发/生产环境等)

    当然可以缩短为:

    导入播放配置;
    输入play.play;
    // ...
    Configuration cfg=Play.application().Configuration();
    getString(“smtp.password”);
    getBoolean(“smtp.mock”);
    cfg.getInt(“smtp.port”);
    
    我试图使用它,但遇到了一个错误->更新了我的第一篇博文非常感谢!只有一个问题,马吕斯建议我使用环境变量,但在我的本地机器上添加它们会有点烦人,因为否则它显然不起作用。最糟糕的是,每次添加新变量时,我都需要重新启动计算机。我的本地机器有解决办法吗