jBOSS+;ESAPI java.lang.ClassCastException:org.jboss.logmanager.log4j.BridgeLogger无法强制转换为org.owasp.ESAPI.Logger
我是Java开发新手,为了安全起见,我尝试使用JBOSS和ESAPI开发一些网站,但遇到了一个例外jBOSS+;ESAPI java.lang.ClassCastException:org.jboss.logmanager.log4j.BridgeLogger无法强制转换为org.owasp.ESAPI.Logger,java,maven,logging,jboss,log4j,Java,Maven,Logging,Jboss,Log4j,我是Java开发新手,为了安全起见,我尝试使用JBOSS和ESAPI开发一些网站,但遇到了一个例外 java.lang.ClassCastException: org.jboss.logmanager.log4j.BridgeLogger cannot be cast to org.owasp.esapi.Logger 当我尝试从OWASP使用ESAPI包时 我的Maven项目由两个模块组成:oak父模块和oak web Maven依赖关系树如下所示: [INFO] --- maven-dep
java.lang.ClassCastException: org.jboss.logmanager.log4j.BridgeLogger cannot be cast to org.owasp.esapi.Logger
当我尝试从OWASP使用ESAPI包时
我的Maven项目由两个模块组成:oak父模块和oak web
Maven依赖关系树如下所示:
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ oak-web ---
[INFO] org.me.oak:oak-web:war:0.0.1-SNAPSHOT
[INFO] +- javax:javaee-api:jar:6.0:provided
[INFO] +- javax.servlet:javax.servlet-api:jar:3.0.1:provided
[INFO] +- log4j:log4j:jar:1.2.16:provided
[INFO] +- org.reflections:reflections:jar:0.9.8:compile
[INFO] | +- javassist:javassist:jar:3.12.1.GA:compile
[INFO] | \- dom4j:dom4j:jar:1.6.1:compile
[INFO] +- org.jboss:jboss-vfs:jar:3.0.1.GA:provided
[INFO] | \- org.jboss.logging:jboss-logging:jar:3.0.0.CR1:provided
[INFO] +- org.owasp.esapi:esapi:jar:2.0.1:compile
[INFO] | +- commons-configuration:commons-configuration:jar:1.5:compile
[INFO] | | +- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] | | | +- logkit:logkit:jar:1.0.1:compile
[INFO] | | | +- avalon-framework:avalon-framework:jar:4.1.3:compile
[INFO] | | | \- javax.servlet:servlet-api:jar:2.3:compile
[INFO] | | \- commons-digester:commons-digester:jar:1.8:compile
[INFO] | | \- commons-beanutils:commons-beanutils:jar:1.8.3:compile
[INFO] | +- commons-beanutils:commons-beanutils-core:jar:1.7.0:compile
[INFO] | +- commons-collections:commons-collections:jar:3.2:compile
[INFO] | +- xom:xom:jar:1.1:compile
[INFO] | | +- xerces:xmlParserAPIs:jar:2.6.2:compile
[INFO] | | +- xalan:xalan:jar:2.7.0:compile
[INFO] | | \- jaxen:jaxen:jar:1.1-beta-8:compile
[INFO] | | \- jdom:jdom:jar:1.0:compile
[INFO] | +- org.beanshell:bsh-core:jar:2.0b4:compile
[INFO] | \- org.owasp.antisamy:antisamy:jar:1.4.3:compile
[INFO] | +- org.apache.xmlgraphics:batik-css:jar:1.7:compile
[INFO] | +- net.sourceforge.nekohtml:nekohtml:jar:1.9.12:compile
[INFO] | \- commons-httpclient:commons-httpclient:jar:3.1:compile
[INFO] | \- commons-codec:commons-codec:jar:1.7:compile
[INFO] +- org.jsoup:jsoup:jar:0.2.2:compile
[INFO] | \- commons-lang:commons-lang:jar:2.4:compile
[INFO] +- xerces:xercesImpl:jar:2.11.0:compile
[INFO] | \- xml-apis:xml-apis:jar:1.4.01:compile
[INFO] +- org.apache.xmlgraphics:batik-codec:jar:1.7:compile
[INFO] | +- org.apache.xmlgraphics:batik-awt-util:jar:1.7:compile
[INFO] | +- org.apache.xmlgraphics:batik-bridge:jar:1.7:compile
[INFO] | | +- org.apache.xmlgraphics:batik-anim:jar:1.7:compile
[INFO] | | +- org.apache.xmlgraphics:batik-ext:jar:1.7:compile
[INFO] | | +- org.apache.xmlgraphics:batik-parser:jar:1.7:compile
[INFO] | | \- org.apache.xmlgraphics:batik-script:jar:1.7:compile
[INFO] | \- org.apache.xmlgraphics:batik-util:jar:1.7:compile
[INFO] \- org.apache.xmlgraphics:batik-transcoder:jar:1.7:compile
[INFO] +- org.apache.xmlgraphics:fop:jar:0.94:compile
[INFO] | +- org.apache.xmlgraphics:xmlgraphics-commons:jar:1.2:compile
[INFO] | +- commons-io:commons-io:jar:2.4:compile
[INFO] | +- org.apache.avalon.framework:avalon-framework-api:jar:4.3.1:compile
[INFO] | \- org.apache.avalon.framework:avalon-framework-impl:jar:4.3.1:compile
[INFO] +- org.apache.xmlgraphics:batik-dom:jar:1.7:compile
[INFO] +- org.apache.xmlgraphics:batik-gvt:jar:1.7:compile
[INFO] +- org.apache.xmlgraphics:batik-svg-dom:jar:1.7:compile
[INFO] +- org.apache.xmlgraphics:batik-svggen:jar:1.7:compile
[INFO] +- org.apache.xmlgraphics:batik-xml:jar:1.7:compile
[INFO] \- xml-apis:xml-apis-ext:jar:1.3.04:compile
我已经创建了jboss-deployment-structure.xml来尝试排除log4j(文件是在oak parent/META-INF中创建的:
<jboss-deployment-structure>
<ear-subdeployments-isolated>true</ear-subdeployments-isolated>
<deployment>
<exclusions>
<module name="org.apache.log4j" />
<module name="org.jboss.logging" />
<module name="org.jboss.logmanager" />
<module name="org.jboss.log4j.logmanager" />
<module name="org.jboss.logmanager.log4j" />
</exclusions>
</deployment>
<sub-deployment name="oak-web.war">
<exclusions>
<module name="org.apache.log4j" />
<module name="org.jboss.logging" />
<module name="org.jboss.logmanager" />
<module name="org.jboss.log4j.logmanager" />
<module name="org.jboss.logmanager.log4j" />
</exclusions>
</sub-deployment>
</jboss-deployment-structure>
真的
但它仍然没有任何帮助
你们中有谁知道这个问题的解决方案吗?与JBoss 5相比,JBoss classloader有点变化。您是否尝试过这种排除方法:
<jboss-deployment-structure>
<deployment>
<!-- Exclusions allow you to prevent the server from automatically adding some dependencies -->
<exclusions>
<module name="org.apache.log4j" />
</exclusions>
</deployment>
</jboss-deployment-structure>
对于
esapi
的maven依赖项,这能达到预期效果吗?(我在dependency tree中看到了它,我查找它是因为我读了它)。你没有提到JBoss应用服务器的版本,但我猜它是7.X接口org.owasp.esapi.reference.Log4JLogger和org.jboss.logmanager.log4j.BridgeLogger都扩展了org.apache.log4j.Logger。
这实际上是jboss问题与log4j的一个变体,常见的解决方案是按照mico的建议排除log4j。
从依赖关系树中,我可以看到您没有从依赖于log4j的esapi 2.0.1依赖关系中获得log4j(添加pom会很有用)。因此,您的pom看起来很好。
我猜您仍然从类路径中的某个地方获得log4j。
尝试使用以下变量(在每个级别上排除)
另请参见以下答案
.将log4j.properties文件放在resources文件夹下,行为:
log4j.loggerFactory=org.owasp.esapi.reference.Log4JLoggerFactory
编辑(2014年10月13日):
我建议使用版本2.1.0,它修复了log4j类加载器的这个问题
最后我设法解决了这个问题。结合了互联网上的几种方法
oak ear
包src/main/application/META-INF/jboss部署结构.xml
:
<?xml version='1.0' encoding='UTF-8'?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
<deployment>
<dependencies>
<module name="org.mickula.mylog" />
</dependencies>
<exclusions>
<module name="org.apache.log4j" />
</exclusions>
</deployment>
<sub-deployment name="oak-web.war">
<dependencies>
<module name="org.mickula.mylog" />
</dependencies>
<exclusions>
<module name="org.apache.log4j" />
</exclusions>
</sub-deployment>
</jboss-deployment-structure>
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="org.mickula.mylog">
<resources>
<resource-root path="log4j-1.2.16.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
</dependencies>
</module>
此更改允许我创建自己的log4j.properties
文件。
我在jboss/standalone/configuration/
中也是这样做的log4j.properties
文件:
在我添加的文件末尾的jboss/bin/standalone.conf中:
JAVA_OPTS=“$JAVA_OPTS-Dlog4j.configuration=file://URL_TO_THE_JBOSS/jboss711/standalone/configuration/log4j.properties“
现在使用ESAPI运行JBoss成功了。谢谢你的帮助。谢谢你的回答,但我已经尝试了这个排除方法。谢谢你的回答,但它能与JBoss log4j一起工作吗?至少对我有效,有完全相同的例外嗯,后来反弹了一些问题,但以与下面提到的相同的方式修复了这些问题,以下是一些官方信息:
<?xml version='1.0' encoding='UTF-8'?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
<deployment>
<dependencies>
<module name="org.mickula.mylog" />
</dependencies>
<exclusions>
<module name="org.apache.log4j" />
</exclusions>
</deployment>
<sub-deployment name="oak-web.war">
<dependencies>
<module name="org.mickula.mylog" />
</dependencies>
<exclusions>
<module name="org.apache.log4j" />
</exclusions>
</sub-deployment>
</jboss-deployment-structure>
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="org.mickula.mylog">
<resources>
<resource-root path="log4j-1.2.16.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
</dependencies>
</module>