4

私は初心者の Java 開発者で、セキュリティのために JBOSS と ESAPI を使用して Web サイトを開発しようとしているときに、例外が発生します。

java.lang.ClassCastException: org.jboss.logmanager.log4j.BridgeLogger cannot be cast to org.owasp.esapi.Logger

OWASP から ESAPI パッケージを使用しようとすると。

私の Maven プロジェクトは、oak-parent と oak-web の 2 つのモジュールで構成されています。

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

log4j を除外するために、すでに jboss-deployment-structure.xml を作成しました (ファイルは 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 クラスローダは、jboss 5 と比較すると少し変更されています。

4

4 に答える 4

2

編集 (13.10.2014): log4j クラスローダーでこの問題を修正したバージョン 2.1.0 を使用することをお勧めします。


最後に、これを解決することができました。インターネット上で利用可能ないくつかの方法を組み合わせたもの。

  1. oak-earパッケージを作成しました
  2. オークの耳に追加しましたsrc/main/application/META-INF/jboss-deployment-structure.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>
    
  3. 次のjbossディレクトリにコピーorg/apache/log4j/main/log4j.jarorg/mickula/mylog/main/て作成しましたmodule.xml

    <?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/

  4. log4j.properties最後に、開始スクリプトを介してJBoss に新しいファイルを指定しjboss/bin/standalone.confました。追加したファイルの最後に:

    JAVA_OPTS="$JAVA_OPTS -Dlog4j.configuration=file://URL_TO_THE_JBOSS/jboss711/standalone/configuration/log4j.properties"

ESAPI を使用して JBoss を実行すると、成功しました。ご協力いただきありがとうございます。

于 2013-10-21T05:42:32.947 に答える