在 Google App Engine Java 服务器中存储凭据

Storing credentials in a Google App Engine Java server

我在 Google App Engine 上有一个 Java 服务器 运行,与第三方服务(例如 SendGrid)集成。

存储这些第三方服务的凭据(usernames/passwords、API 密钥)的最佳方式是什么?在 Java 代码中,或通过 web.xml 或 appengine-web.xml 等配置文件,或其他地方?我将如何通过代码访问凭据?

我认为将敏感数据保存在 WEB-INF 文件夹中的外部文件中是很好的。很多第三方服务的密钥可以像文件一样下载,你只需要粘贴它,比如

并且您可以像

这样的代码访问它
getServletContext().getResourceAsStream("/WEB-INF/credentials.json")

如果您在 GAE 中使用 Java,那么,

您可以将凭据保存在 src/main/resources/ 下的文件中,或者如果您不使用此结构,请将文件放入 src包。

ClassLoader classloader = Thread.currentThread().getContextClassLoader();
InputStream is = classloader.getResourceAsStream("credentials.json");

InputStream is = AnyClassName.class.getResourceAsStream("credentials.json");

这里回答了如何阅读,How do I load a file from resource folder?

然后您可以使用任何 Json 库将 inputStream 转换为 Map 或任何 pojo,流行的是

  • Gson
  • 杰克逊

还要确保该文件未在版本控制中跟踪(如果您使用的话),以便其他人无法使用该文件,并且只有在部署期间您才能注入该文件。

同样的解决方案也适用于其他语言,只是文件夹结构与 java 不同。