gpt4 book ai didi

java - 如何使用 Java 在 GAE 中设置环境变量 - 不在主代码中公开?或其他隐藏应用程序使用的 key 的方法?

转载 作者:搜寻专家 更新时间:2023-11-01 03:19:07 26 4
gpt4 key购买 nike

我正在使用 Java 在 GAE 上开发一个网络应用程序,我将在 Github 上打开这个网络应用程序的代码。

但是,我不喜欢在代码中公开一些 API key 。因此,我正在寻找一种方法来存储应用程序可以获得的一些数据,而不是在 Github 上发布的工作应用程序代码中显示这些数据。

例如,这个 servlet https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/appengine/mailgun/src/main/java/com/example/appengine/mailgun/MailgunServlet.java使用 System 获取 API key .getenv() 通常是环境变量 written in appengine-web.xml还有别的办法吗?要从 Google Developers Console 设置环境变量或安全地存储并从 GAE Datastore 获取它们?

最佳答案

通常它是通过外部 .properties 文件(和 Properties 类)完成的。假设您有一个用于演示开发,一个用于生产(通常还有第三个用于测试)。所以你可以将开发文件上传到 Github,并自己保留生产配置(也不要忘记将其添加到 .gitignore 中)。

resources 文件夹中基本上有 3 个文件:

  • myapp.prod.properties
  • myapp.dev.properties
  • myapp.test.properties

(命名模式由您决定,它可以只是 prod.properties,但在这种情况下它可能与来自第 3 方库的某些文件冲突)。

有一个教程如何读取此类文件:https://docs.oracle.com/javase/tutorial/essential/environment/properties.html和 JavaDoc https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html

你需要这样的东西:

Properties props = new Properties();
String name;
if (SystemProperty.Environment.Value.Development == SystemProperty.environment.value()) {
name = "myapp.dev.properties";
} else {
name = "myapp.prod.properties";
}
props.load(Classname.class.getClassLoader().getResourceAsStream(name));

大多数 Java 网络框架都可以自动为您完成这项工作。例如,在 Spring 中查看 Profiles、@PropertySourceConfigurableApplicationContext

关于java - 如何使用 Java 在 GAE 中设置环境变量 - 不在主代码中公开?或其他隐藏应用程序使用的 key 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36571579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com