2014-11-20 34 views
0

我正在開發一個Struts 2 web應用程序,所有常量值和硬編碼值都將移動到屬性文件以及那些特定於數據環境的常量源名稱,一些服務器連接URL和幾個用戶ID也放置在屬性文件中。正確位置以放置struts web應用程序的屬性文件

最初我放置的屬性在類文件的路徑和使用的資源束,如下

ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("config\appProps"); 

問題的,這是因爲那些環境的特定常量永遠環境(DEV/UAT/PROD)一個單獨的訪問戰爭需要通過更改屬性文件環境特定的常量值來生成,以避免我在以下過程中使用

我在web.xml的上下文參數中保留了屬性文件的絕對路徑,並從上下文獲取路徑並閱讀下面的屬性文件

Properties prop = new Properties(); 
    prop.load(new FileInputStream("<<file system absolute path from context param>>")); 

這就消除產生每個環境在服務器上的路徑不同的戰爭過程中可保持不變,但我才知道,安全明智的,我們不應該使用絕對路徑一樣,這可能使服務器文件系統詳細信息

請讓我知道在Web應用程序中加載屬性文件的正確方法是考慮安全性,並避免爲每個環境生成不同的war文件。

謝謝。

+0

公開服務器文件系統詳細信息* who *? – 2014-11-21 14:02:14

+0

嗨Dave Newton當我們讓我們的代碼掃描一些應用程序安全工具時,它給出了一個高風險的說法,那就是黑客有機會利用文件系統,所以我們不應該在應用程序中使用絕對路徑。不完全確定該安全工具告訴的是否有效,因爲我們在web.xml中有路徑而不在任何JSP文件中。 – Vinay 2014-11-21 15:50:56

+0

如果他們已經在利用文件系統,那麼做任何有價值的事情都爲時已晚。如果它沒有抱怨web.xml路徑,你可以使用init-params,你可以在應用服務器上使用JNDI等。 – 2014-11-21 15:56:16

回答

0

您可能會將整個屬性對象提升爲JNDI,這將修復它,但實現可能是服務器特定的。現在你遇到了一個新問題。確保在讀取它們之前加載屬性。

+0

感謝Friso&Dave Newton展示了一個新的方向,但我無法獲得關於使用JNDI作爲屬性,我所能獲得的關於JNDI的所有信息都是關於如何爲db連接配置JNDI數據源。只有我能夠找到信息的地方是http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html在通用Java Bean資源部分下,但是也不完整,所有屬性都不保留爲屬性感覺正確。我的應用程序位於IBM WAS中,請您指出一些具體示例,說明如何執行此操作。 – Vinay 2014-11-27 04:33:38

+0

另外請讓我知道使用JNDI爲此目的將導致任何其他影響或其罰款 – Vinay 2014-11-27 04:36:17

+0

我對WAS有點生疏,但如果內存服務,它比Tomcat更容易。由於JNDI是一棵樹,因此您可以使用字符串屬性,並且每個JDNI條目都有一個鍵/值對。請參閱http://stackoverflow.com/questions/12312699/how-to-configure-a-string-value-in-websphere-7-jndi否則http://www.glezen.org/howto/AppConfig/index.html #extprops可能適合您的需求 – Friso 2014-11-27 10:33:22

相關問題