Tomcat: possible d'exclure des pots pendant le déploiement de l'application?

8

Par défaut, Tomcat empêche les applications Web de charger plusieurs fichiers .jars qui font partie de la distribution Tomcat (par exemple, le servlet et les API JSP) - est-il possible d'en configurer d'autres à exclure également?

Si cela ne peut pas être fait uniquement avec la configuration, Tomcat fournit-il des points d'extension pour la validation des ressources?

Je souhaite utiliser des bibliothèques de journalisation partagées et je dois m'assurer qu'une application erronée n'encombre pas la configuration.

Exemple

Voici à quoi je fais référence (à partir du journal de démarrage de Tomcat):

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
la source
Je ne pense pas que tomcat Exclue quoi que ce soit en tant que tel juste une question de séquence de chargement de classe dont le pot vient en premier dans classpath. Vous êtes peut-être après cela. stackoverflow.com/questions/267953/managing-libraries-in-tomcat
@Shahzeb: J'ai ajouté un exemple. Il ne s'agit pas vraiment de la façon dont les différents chargeurs de classe interagissent - je veux pouvoir valider les ressources que les applications Web essaient de charger.
Dmitri

Réponses:

6

Vous vérifiez / filtrez les applications Web qui se chargent à l'aide d'un chargeur personnalisé s'étendant à partir de org.apache.catalina.loader.WebappClassLoadercelui mentionné dans la documentation Tomcat .

Découvrez l'implémentation de Tomcat (7.0.19) de la normeWebAppClassLoader qui implémente le filtrage dejavax.servlet.Servlet pour commencer. Il suffit probablement de remplacer cette classe et de simplement ajouter quelques entrées dans les protected String[]champs triggerset packageTriggers.

Philipp Reichart
la source
1
Bien sûr, votre coutume WebappClassLoaderdevrait aller dans son propre JAR TOMCAT_HOME/libloin de vos applications Web, juste pour énoncer l'évidence :)
Philipp Reichart