NoClassDefFoundError в Tomcat 7

Мы столкнулись со странной проблемой в производстве. Наше веб-приложение развернуто в Tomcat 7. Мы используем Antisamy-1.5.3.jar для предотвращения XSS. Каждый пользовательский запрос перехватывается фильтром, который сканирует запросы на наличие вредоносного контента. В Tomcat 6 все было хорошо в течение более года. Мы перешли на Tomcat 7. Пользователи включают и выключают NoClassDefFoundError, когда открывают приложение (не согласовано), но при перезапуске Tomcat все работает нормально.

Ниже приведен поток, где выбрасывается исключение

  1. Пользовательский запрос перехватывается AntiSamyFilter и вызывается метод сканирования класса owasp.validator.html.AntiSamy (внутренний класс AntiSamy).

  2. Ниже приведен код для метода сканирования

     public CleanResults scan(String taintedHTML, Policy policy)
     throws ScanException, PolicyException
     {
         return new AntiSamyDOMScanner(policy).scan(taintedHTML);
       }
    
  3. Когда в коде выше упоминается класс AnitSamyDOMScanner, вызывается статический блок инициализации суперкласса AntiSamyDOMScanner - AbstractAntiSamyScanner, как показано ниже

     private static ResourceBundle getResourceBundle() {
       try {
       return ResourceBundle.getBundle("AntiSamy",  Locale.getDefault());      } 
    catch (MissingResourceException mre) {
     }
       return ResourceBundle.getBundle("AntiSamy", new Locale("en", "US"));
     }
    

Именно здесь генерируется исключение, потому что tomcat по какой-то причине не может загрузить пакет ресурсов - файл AntiSamy_en_US.properties присутствует в файле jar на корневом уровне. Поскольку это ошибка в статическом блоке, ExceptionInInitializer выбрасывается, что в конечном итоге приводит к NoClassDefFoundError.

Ниже приведены два исключения, если смотреть вместе - мы видим, что NoClassDefFoundError вызывается из-за исключения в статическом блоке инициализации AbstractAntiSamyScanner.

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

Мы пытались скопировать Antisamy.properties из Tomcat lib, а также WEB-INF/classes, но это не сработало. Любые мысли о том, что может привести к тому, что AbstractAntiSamyScanner не найдет пакет ресурсов в банке?

0 ответов

Другие вопросы по тегам