Tomcat: Kann Jars während der App-Bereitstellung ausgeschlossen werden?

8

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
Dmitri
quelle
Ich glaube nicht, dass Tomcat irgendetwas als solches ausschließt, nur eine Frage der Klassenladesequenz, die im Klassenpfad an erster Stelle steht. Sie können danach sein. stackoverflow.com/questions/267953/managing-libraries-in-tomcat
@ Shahzeb: Ich habe ein Beispiel hinzugefügt. Hier geht es nicht wirklich darum, wie die verschiedenen Klassenladeprogramme interagieren. Ich möchte in der Lage sein, die Ressourcen zu validieren, die Webapps zu laden versuchen.
Dmitri

Antworten:

6

Sie überprüfen / filtern, welche Webanwendungen geladen werden, indem Sie einen benutzerdefinierten Loader verwenden, der sich org.apache.catalina.loader.WebappClassLoaderwie in der Tomcat-Dokumentation beschrieben erstreckt .

Schauen Sie sich Tomcats Implementierung (7.0.19) des Standards anWebAppClassLoader , der die Filterung vonjavax.servlet.Servlet implementiert, um loszulegen. Es ist wahrscheinlich genug, um diese Klasse zu überschreiben und einfach weitere Einträge in die protected String[]Felder triggersund zu setzen packageTriggers.

Philipp Reichart
quelle
1
Natürlich sollte Ihr Brauch außerhalb Ihrer Web-Apps WebappClassLoaderin ein eigenes JAR gehen TOMCAT_HOME/lib, um das Offensichtliche
Philipp Reichart