我正在为我的项目使用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因此它找到了system属性(因为路径和我指定的一样),但是当它查找其中的实际目录和文件时,我想目录要么不在那里,要么无法读取。
我要把它搬到别的地方吗?可能在WEB目录中?背景不对吗?我读过其他人通过为这个目录构建一个JAR来解决类似的问题,但是这似乎不是一个好的解决方案,必须有一个简单的设置才能适用于cloudbees。
发布于 2012-09-27 08:58:33
好的,在搜索和测试之后,我终于找到了答案。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-24 08:07:46
ESAPI库的设计要求目录访问配置不是很灵活。一个通用选项是使用ServletContext.getRealPath解析该目录的绝对文件系统路径,并将其传递给ESAPI。
另一种选择是在临时目录中有一些init代码来复制WEB/classes/ ESAPI内容(使用java.io.temp系统属性指向当前为您的应用程序配置的临时目录),并将ESAPI库指向此路径。
https://stackoverflow.com/questions/12400162
复制相似问题