Standardmäßig verhindert Tomcat, dass Webanwendungen mehrere JAR-Dateien laden, die Teil der Tomcat-Distribution sind (z. B. die Servlet- und JSP-APIs). Ist es möglich, andere so zu konfigurieren, dass sie ebenfalls ausgeschlossen werden?
Bietet Tomcat Erweiterungspunkte für die Ressourcenüberprüfung, wenn dies nicht allein mit der Konfiguration möglich ist?
Ich möchte gemeinsam genutzte Protokollierungsbibliotheken verwenden und muss sicherstellen, dass eine fehlerhafte App die Konfiguration nicht beeinträchtigt.
Beispiel
Dies ist, worauf ich mich beziehe (aus dem Tomcat-Startprotokoll):
Oct 1, 2011 5:53:40 AM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(D:\tomcat\myapp\WEB-INF\lib\servlet-api.jar) - jar not loaded.
See Servlet Spec 2.3, section 9.7.2.
Offending class: javax/servlet/Servlet.class
Antworten:
Sie überprüfen / filtern, welche Webanwendungen geladen werden, indem Sie einen benutzerdefinierten Loader verwenden, der sich
org.apache.catalina.loader.WebappClassLoader
wie in der Tomcat-Dokumentation beschrieben erstreckt .Schauen Sie sich Tomcats Implementierung (7.0.19) des Standards an
WebAppClassLoader
, der die Filterung vonjavax.servlet.Servlet
implementiert, um loszulegen. Es ist wahrscheinlich genug, um diese Klasse zu überschreiben und einfach weitere Einträge in dieprotected String[]
Feldertriggers
und zu setzenpackageTriggers
.quelle
WebappClassLoader
in ein eigenes JAR gehenTOMCAT_HOME/lib
, um das Offensichtliche