在 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 不同。
我在 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 不同。