Tomcat 7中的NoClassDefFoundError

时间:2016-05-03 03:59:48

标签: java tomcat esapi antisamy

我们在生产中遇到了一个奇怪的问题。我们是部署在Tomcat 7中的Web应用程序。我们使用Antisamy-1.5.3.jar进行XSS预防。每个用户请求都被一个过滤器拦截,该过滤器扫描任何恶意内容的请求。 这个设置在Tomcat 6中都很好,超过一年。我们迁移到Tomcat 7.用户在打开应用程序时打开和关闭NoClassDefFoundError(不一致)但是当Tomcat重新启动时,它可以正常工作。

以下是抛出异常的流程

  1. 用户请求被owasp.validator.html拦截了AntiSamyFilter和scan方法.AntiSamy类(AntiSamy内部类)被调用。

  2. 以下是扫描方法的代码

     public CleanResults scan(String taintedHTML, Policy policy)
     throws ScanException, PolicyException
     {
         return new AntiSamyDOMScanner(policy).scan(taintedHTML);
       }
    
  3. 当上面的代码中引用了AnitSamyDOMScanner类时,会调用AntiSamyDOMScanner - AbstractAntiSamyScanner超类的静态init块,如下所示

     private static ResourceBundle getResourceBundle() {
       try {
       return ResourceBundle.getBundle("AntiSamy",  Locale.getDefault());      } 
    catch (MissingResourceException mre) {
     }
       return ResourceBundle.getBundle("AntiSamy", new Locale("en", "US"));
     }
    
  4. 这是引发异常的地方,因为tomcat由于某种原因无法加载资源包 - 根文件中的jar文件中存在AntiSamy_en_US.properties文件。 由于这是静态块中的错误,因此抛出ExceptionInInitializer最终导致NoClassDefFoundError。

    以下是同时查看的两个异常 - 我们可以看到NoClassDefFoundError是由于AbstractAntiSamyScanner的静态init块中的异常引起的。

    SEVERE: Servlet.service() for servlet [jsp] in context with path [/app] threw exception [javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class org.owasp.validator.html.scan.AntiSamyDOMScanner] with root cause
                java.lang.NoClassDefFoundError: Could not initialize class org.owasp.validator.html.scan.AntiSamyDOMScanner
                          at org.owasp.validator.html.AntiSamy.scan(AntiSamy.java:93)           
                          at org.apache.jsp.index_jsp._jspService(index_jsp.java:124)
                          at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    
    
                 java.lang.NoClassDefFoundError: Could not initialize class org.owasp.validator.html.scan.AntiSamyDOMScanner StackTrace: javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class org.owasp.validator.html.scan.AntiSamyDOMScanner at
    

    我们已经尝试复制Tomcat lib下的Antisamy.properties以及WEB-INF / classes但它没有用。 有什么可能导致AbstractAntiSamyScanner找不到jar中的资源包的想法吗?

0 个答案:

没有答案