Tomcat: ¿es posible excluir frascos durante la implementación de la aplicación?

8

De forma predeterminada, Tomcat evita que las aplicaciones web carguen varios .jars que forman parte de la distribución de Tomcat (por ejemplo, las API de servlet y JSP). ¿Es posible configurar otros para que también se excluyan?

Si no se puede hacer solo con la configuración, ¿Tomcat proporciona algún punto de extensión para la validación de recursos?

Quiero usar bibliotecas de registro compartidas y necesito asegurarme de que una aplicación errante no bloquee la configuración.

Ejemplo

Esto es a lo que me refiero (del registro de inicio 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
fuente
No creo que tomcat excluya cualquier cosa como tal solo una cuestión de secuencia de carga de clase, que jar viene primero en classpath. Puede ser después de esto. stackoverflow.com/questions/267953/managing-libraries-in-tomcat
@Shahzeb: agregué un ejemplo. No se trata realmente de cómo interactúan los diferentes cargadores de clases: quiero poder validar los recursos que las aplicaciones web intentan cargar.
Dmitri

Respuestas:

6

Usted verifica / filtra qué aplicaciones web se cargan usando un cargador personalizado que se extiende org.apache.catalina.loader.WebappClassLoadercomo se menciona en la documentación de Tomcat .

Consulte la implementación de Tomcat (7.0.19) del estándarWebAppClassLoader que implementa el filtrado dejavax.servlet.Servlet para comenzar. Probablemente sea suficiente para anular esa clase y simplemente poner algunas entradas más en los protected String[]campos triggersy packageTriggers.

Philipp Reichart
fuente
1
Por supuesto, su costumbre WebappClassLoaderdebe entrar en su propio JAR en TOMCAT_HOME/liblejos de sus aplicaciones web, sólo para decir lo obvio :)
Philipp Reichart