这是我的场景。 我有一个可正常工作的登录表单。我试图安装ESAPI以确保表单安全。
这样,现在当我尝试登录该消息在浏览器中生成:尝试登录会生成java.lang.NoClassDefFoundError和java.lang.ClassNotFoundException错误
java.lang.NoClassDefFoundError: org/owasp/esapi/ESAPI
at com.tunestore.action.LoginAction.execute(LoginAction.java:43)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
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:306)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.tunestore.servlet.PersistenceFilter.doFilter(PersistenceFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281)
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.owasp.esapi.ESAPI
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1671)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
... 31 more
ROOT CAUSE
java.lang.ClassNotFoundException: org.owasp.esapi.ESAPI
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1671)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
at com.tunestore.action.LoginAction.execute(LoginAction.java:43)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
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:306)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.tunestore.servlet.PersistenceFilter.doFilter(PersistenceFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
我使用Eclipse的Java EE IDE靛蓝服务发布1
我已经到该项目的属性并将esapi-2.0.1.jar文件添加到库中。
这是所有应该需要但我收到上面的消息。为了排除故障,我做了以下工作:
另外,我已经钻完并手动将源附件和本机库位置指向esapi zip文件附带的src和lib目录。
我将项目配置为使用JDK,因为它是使用JRE作为“已安装的JRE”创建的。
通过:
- 右键单击该项目的名称。
- 选择“属性”,“Java构建路径”
- 单击选项卡“库”。
- 点击“添加库”,选择“JRE系统库”,然后
- 选择底部的项目:工作区缺省JRE(jdk1.xx等....)
- (请注意,它现在是一个JDK和不是JRE!)
- 单击“Finish”
- 现在删除JRE libarary,以便只有JDK库。
- 例如:JRE系统库[JavaSE的-1.6]
- 单击 “确定”
接下来,我配置的Eclipse通过执行以下操作使用JDK,而不是JRE:
- 窗口 - >首选项 - > Java的>安装的JRE
- 点击 “添加”, “标准VM”, “下一步”
- 对于 “JRE主页”,单击 “目录”
- 找到您的JDK目录...
- 例如:C:\ java的\ jdk1.6.0_24
- 单击 “完成”
- 接着检查JDK VS列出的JRE。
- 单击 “确定”
要确保.properties文件被承认我还添加了
-Dorg.owasp.esapi.resources="c:\.esapi"
到默认VM参数。
我还在此处列出的JRE系统库中添加了相同的esapi-2.0.1.jar文件。
最后我在Project Explorer中进入了我的项目,并从库> JRE System Library> esapi-2.0.1.jar> org.owasp.esapi> ESAPI.class> ESAPI进行了钻取,并声明它现在确实具有这个源代码让我浏览了esapi zip文件被提取的同一个src文件夹。
通过所有这些步骤,错误仍保持不变。
可能的重复[当我尝试在Eclipse中运行我的项目时,为什么我的虚拟机参数的路径不能找到?](http://stackoverflow.com/questions/8191282/why-cant-my-vm- arguments-path-not-be-found-when-i-try-to-run-my-project-in-ecl) –