【问题标题】:Correct location to place the properties file for a struts web application为 struts Web 应用程序放置属性文件的正确位置
【发布时间】:2015-01-18 21:30:03
【问题描述】:

我正在开发一个 Struts 2 Web 应用程序,所有常量值和硬编码值都被移动到一个属性文件中id 也放在属性文件中。

最初我将属性文件放在类路径中,并使用如下资源包访问

 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 应用程序中加载属性文件的正确方法是什么。

谢谢。

【问题讨论】:

  • 公开服务器文件系统详细信息?
  • 嗨 Dave Newton,当我们让我们的代码通过一些应用程序安全工具进行扫描时,它给出了一个高风险的说法,黑客有可能利用文件系统,所以我们不应该使用绝对路径在应用程序中。不确定该安全工具告诉的内容是否有效,因为我们在 web.xml 中没有任何 JSP 文件中的路径。
  • 如果他们已经在利用文件系统,那么做任何有价值的事情都为时已晚。如果它不抱怨 web.xml 路径,您可以使用 init-params,您可以在应用服务器上使用 JNDI,等等。

标签: java jakarta-ee web-applications struts2 war


【解决方案1】:

您可以将整个属性对象提升到 JNDI 中,这样可以修复它,但实现可能是特定于服务器的。现在你遇到了一个新问题;确保在阅读之前加载了属性。

【讨论】:

  • 感谢 Friso 和 Dave Newton 展示了一个新的方向,但我无法获得有关使用 JNDI 进行属性的更多信息,我能够获得的有关 JNDI 的所有信息都是关于如何配置 JNDI 数据数据库连接的来源。我唯一能找到信息的地方是通用 Java Bean 资源部分下的tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html,但这也不完整,将所有属性作为属性感觉不正确。我的应用程序在 IBM WAS 中,您能否指出任何具体示例来说明如何执行此操作。
  • 另外,请让我知道为此目的使用 JNDI 会造成任何其他影响或罚款
  • 我对 WAS 有点生疏,但如果没记错的话,它比 Tomcat 更容易。由于 JNDI 是一棵树,您可以使用字符串属性,并且每个 JDNI 条目都有一个键/值对。请参阅 stackoverflow.com/questions/12312699/… 否则 glezen.org/howto/AppConfig/index.html#extprops 可能适合您的需求
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 2014-08-13
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多