0

我正在为我的项目使用 ESAPI,并添加了 ESAPI 配置目录,src/main/resources以便将其复制到我的 WAR 文件中(我从 cloudbees 下载了 WAR,我可以看到它已放在WEB-INF/classes/esapi/目录中)

在本地,我只是指向目录所在的位置,一切正常,但在 cloudbees 上它对我不起作用。

为了访问它的属性,ESAPI 项目尝试了各种各样的东西,包括检查org.owasp.esapi.resources系统属性,所以我添加了以下代码cloudbees-web.xml

<sysprop name="org.owasp.esapi.resources" value="WEB-INF/classes/esapi/" />

我可以看到由于日志中的以下错误而找到了系统属性值:

Not found in 'org.owasp.esapi.resources' directory or file not readable: /var/genapp/apps/akld3873/WEB-INF/classes/esapi/ESAPI.properties

所以它会找到系统属性(因为路径就像我指定的那样),但是当它在其中查找实际目录和文件时,我猜该目录不存在或不可读。

我需要把它移到别的地方吗?也许在 WEB-INF 目录里面?设置不对吗?我读过其他人通过为这个目录构建一个 JAR 解决了类似的问题,但这似乎不是一个好的解决方案,必须有一个简单的设置适用于 cloudbees。

4

2 回答 2

1

为 ESAPI lib 设计需要对配置进行目录访问的设计不是很灵活。一个通用选项是使用ServletContext.getRealPath来解析该目录的绝对文件系统路径并将其传递给 ESAPI。

另一种选择是让您有一些初始化代码来复制临时目录中的 WEB-INF/classes/esapi 内容(使用 java.io.temp 系统属性指向您的应用程序当前配置的临时目录)并将 ESAPI lib 指向这条路。

于 2012-09-24T08:07:46.957 回答
1

好的,经过搜索和测试,我终于弄明白了。Cloudbees 将您的 Web 应用程序部署到以下目录:

staxcat/install/webapp.war/

请注意,这是一个相对路径,附加了此路径的前缀,它看起来像这样:

/var/genapp/apps/xxxxxxxx/staxcat/install/webapp.war/WEB-INF/esapi/ESAPI.properties

所以,为了让 ESAPI 工作,我必须在 cloudbees-web.xml 中设置以下内容:

<sysprop name="org.owasp.esapi.resources" value="staxcat/install/webapp.war/WEB-INF/esapi" />

如果在您的项目中它位于以下位置,这将使 ESAPI 能够找到该目录:

src/main/webapp/WEB-INF/esapi

你应该得到以下日志行:

Found in 'org.owasp.esapi.resources' directory: /var/genapp/apps/xxxxxxxxx/staxcat/install/webapp.war/WEB-INF/esapi/ESAPI.properties
于 2012-09-27T08:58:33.277 回答