如何让EAR从WAR读取属性文件?

时间:2018-02-07 21:22:49

标签: wildfly classloader war ear properties-file

我正在使用Wildfly 11和Java 8.我正在尝试部署包含多个WAR文件的EAR文件。我的一个WAR文件在其web.xml中包含了这个...

<context-param>
    <param-name>Owasp.CsrfGuard.Config</param-name>
    <param-value>csrfguard.properties</param-value>
</context-param>

有问题的文件位于我的一个WAR

之内
myapp.war/WEB-INF/classes/csrfguard.properties

当我自己部署WAR时,一切都很好。但是当我部署包含WAR的EAR时,我收到一个错误,抱怨无法找到属性文件......

Caused by: java.io.IOException: unable to locate resource - csrfguard.properties
    at org.owasp.csrfguard.CsrfGuardServletContextListener.getResourceStream(CsrfGuardServletContextListener.java:85)
    at org.owasp.csrfguard.CsrfGuardServletContextListener.contextInitialized(CsrfGuardServletContextListener.java:36)
    ... 10 more

我觉得有一个类加载器问题正在发生,我没有弄清楚如何解决。如何告诉我的EAR文件在哪里找到有问题的属性文件?

2 个答案:

答案 0 :(得分:1)

我怀疑使用了错误的类加载器来搜索csrfguard.properties的类路径,这会导致getResourceAsStream失败。在 .ear 文件中,CSRFGuard库在哪里打包?

您可以尝试使用context.getRealPath回退切换到相对于 .war 文件的路径:

<context-param>
    <param-name>Owasp.CsrfGuard.Config</param-name>
    <param-value>WEB-INF/classes/csrfguard.properties</param-value>
</context-param>

答案 1 :(得分:0)

我有同样的问题。通过在WAR文件的csrfguard.jar目录而不是EAR的lib目录中添加WEB-INF/lib来解决此问题。将csrfguard.properties文件添加到WEB-INF/classes目录,并在web.xml

中使用以下上下文参数
<context-param>
    <param-name>Owasp.CsrfGuard.Config</param-name>
    <param-value>csrfguard.properties</param-value>
</context-param>