jBOSS+;ESAPI java.lang.ClassCastException:org.jboss.logmanager.log4j.BridgeLogger无法强制转换为org.owasp.ESAPI.Logger

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开发新手,为了安全起见,我尝试使用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-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
  • 在OakEAR中,我添加了
    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/
    中也是这样做的

  • 最后,我通过起始脚本将JBoss指向新的
    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>