2014-10-08 17 views
0

我確實有兩個應用程序(說App1 & App2)在tomcat服務器上。它們都在C:\ Tomcat7_0_29 \ webapps \ AppX \ WEB-INF \ lib文件夾中具有ESAPI-2.0-rc5.jar。對於SAML需求,App2正在使用opensaml-2.6.0.jar(位於C:\ Tomcat7_0_29 \ webapps \ App2 \ WEB-INF \ lib文件夾內)。類加載器尋找錯誤的包類

現在,每當我嘗試編碼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 
+0

注意:版本2.1.0之前的ESAPI包含潛在的可怕加密缺陷:https://bugzilla.redhat.com/show_bug.cgi?id=1013589 – avgvstvs 2014-10-09 11:41:10

+0

可能的重複:https://stackoverflow.com/questions/ 22856730/classnotfoundexception-in-tomcat-6-when-a-jar-is-deleted?rq = 1 – avgvstvs 2014-10-10 18:44:23

+0

Thanks Avgvstvs。上面的鏈接是在同一個應用程序中處理兩個包。但是我的情況是,一個應用程序試圖從jar中訪問一個包,這個jar並不包含在這個應用程序中,也不在tomcat lib中。 – user2807714 2014-10-14 15:26:06

回答

2
  1. 檢查,以確保opensaml的圖書館是在類路徑上。如果這個簡單的解決方案是不是這樣的......

  2. 看一看maven的回購協議的最新版本opensaml的:

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

它看起來像的opensaml庫對esapi 2.0.1有依賴性,並且可能發生的是ESAPI-2.0-rc5.jar在opensaml的依賴性之前被加載。對於無法克隆環境的人來說,唯一可行的指導方法是嘗試下載opensaml的源代碼,並在更新其依賴關係管理以指向您的ESAPI版本後進行構建。

0

面對完全一樣的問題,我 如何通過複製opensaml-2.6.1.jar文件到tomcat的解決了這個共享/通用lib文件夾 「/ tomcat的/ lib目錄/。」