2016-07-28 40 views
1

我有一個在Google App Engine上運行的Java服務器,並與第三方服務(例如SendGrid)集成。在Google App Engine Java服務器中存儲憑證

爲這些第三方服務存儲憑證(用戶名/密碼,API密鑰)的最佳方式是什麼?在Java代碼中,還是通過配置文件(如web.xml或appengine-web.xml)或其他位置?我如何通過代碼訪問憑據?

+0

在執行之前,這*可能是有趣的:http://stackoverflow.com/questions/3777367/what-is-a-good-place-to-store-configuration-in-google-appengine-python –

+0

我通常將我的憑據存儲在屬性文件中,並將它們加載到靜態配置類中。通過這種方式即使缺少憑證也可以編譯代碼,並且不必將您的憑據提交給SCM(僅排除屬性文件) – konqi

回答

2

訪問它的代碼,

您可以保存下SRC在文件中的憑據/主/資源/,或者如果你沒有使用這種結構,將文件放在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?

,那麼你可以轉換的InputStream地圖或使用任何JSON庫任何POJO,流行的是,

  • Gson
  • J ackson

還要確保文件沒有在版本控制中跟蹤(如果使用任何),以便該文件不可用於其他人,並且只有在部署過程中才能注入該文件。

同樣的解決方案也適用於其他語言,只是不像java一樣的文件夾結構。

+0

謝謝,是否像WEB-INF文件夾一樣隱藏公共的「資源」文件夾? – user2181948

+0

是的,它只是應用程序可訪問的,實際上它將在WEB-INF/classes文件夾下 –

0

在我看來,將敏感數據保存在WEB-INF文件夾的外部文件中是很好的做法。許多第三方服務鍵可以下載喜歡的文件,你只需要貼吧,像example file

而且你可以的,如果你在GAE使用Java然後像

getServletContext().getResourceAsStream("/WEB-INF/credentials.json") 
+0

該文件如何從servlet外部訪問? – user2181948

+0

WEB-INF目錄是Web應用程序的專用區域,無法通過指定URL來直接從瀏覽器訪問WEB-INF目錄下的任何文件,如http://yoursite/WEB-INF/credentials.json – Yevgen

+0

我的意思是如何您是否從不是http servlet的方法訪問該文件?我注意到你使用了getServletContext()方法。 – user2181948