【问题标题】:Class Loader looking for wrong package class类加载器寻找错误的包类
【发布时间】:2014-10-08 21:32:16
【问题描述】:

我在 tomcat 服务器上有两个应用程序(比如 App1 和 App2)。两者都在 C:\Tomcat7_0_29\webapps\AppX\WEB-INF\lib 文件夹中有 ESAPI-2.0-rc5.jar。 App2 使用 opensaml-2.6.0.jar(在 C:\Tomcat7_0_29\webapps\App2\WEB-INF\lib 文件夹内)来满足 SAML 的需求。

现在每次我尝试在 App1 中对字段数据进行编码时,都会收到 java.lang.ClassNotFoundException: org.opensaml.ESAPISecurityConfig 错误。 尝试了很多选择,但从来没有一起工作。请帮忙

全栈跟踪:

org.owasp.esapi.errors.ConfigurationException: java.lang.ClassNotFoundException: org.opensaml.ESAPISecurityConfig SecurityConfiguration class (org.opensaml.ESAPISecurityConfig) must be in class path.
    at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:113)
    at org.owasp.esapi.ESAPI.securityConfiguration(ESAPI.java:445)
    at org.owasp.esapi.ESAPI.encoder(ESAPI.java:208)
    at xxx.xxx.xxxx.xx.removeBadChars(BaseObject.java:131)
    at xxx.xxx.xxxx.xx.convert(ClaimsUtil.java:45)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.opensaml.ESAPISecurityConfig
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:85)
    ... 24 more

【问题讨论】:

标签: classloader opensaml esapi


【解决方案1】:
  1. 检查以确保 opensaml 的库位于类路径上。如果不是这种简单的解决方案...

  2. 查看最新版本的 opensaml 的 maven 存储库:

http://mvnrepository.com/artifact/org.opensaml/opensaml/2.6.1

看起来 opensaml 库依赖于 esapi 2.0.1,可能发生的情况是 ESAPI-2.0-rc5.jar 在 opensaml 的依赖之前被加载。对于无法克隆您的环境的人来说,唯一可行的指导是尝试下载 opensaml 的源代码,并在更新其依赖项管理以指向您的 ESAPI 版本后构建它。

【讨论】:

    【解决方案2】:

    面临完全相同的问题, 我如何通过将 opensaml-2.6.1.jar 文件复制到 tomcat shared/common lib 文件夹“/tomcat/lib/”中来解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 2014-04-08
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      相关资源
      最近更新 更多