Web.xml: ¿Son etiquetas url-pattern respecto a la otra?
-
01-10-2019 - |
Pregunta
<servlet-mapping>
<servlet-name>myName</servlet-name>
<url-pattern>/aName</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
...
<url-pattern>
/*
</url-pattern>
</web-resource-collection>
...
</security-constraint>
Este es un extracto de web.xml (usarlo para configurar un jboss / tomcat servicio web). Sólo me preguntaba si el url-pattern
en web-resource-collection
es relativa a la url-pattern
en servlet-mapping
.
Solución
El url-pattern
utilizado para seleccionar las restricciones para una petición dada no son en relación con cualquier cosa. Las partes interesantes del servlet spec aquí son:
SRV.12.8.3 procesamiento de las solicitudes
Cuando un contenedor servlet recibe una solicitud, se deberá utilizar el algoritmo descrito en SRV.11.1 para seleccionar el restricciones (si las hay) definidos en el
url-pattern
que es el mejor partido de la URI de la solicitud. Si no hay restricciones son seleccionado, el contenedor deberá aceptar la solicitud. De lo contrario el envase determinará si el método HTTP de la solicitud está limitada en el patrón seleccionado. Si no lo es, la se aceptó la solicitud. De otra manera, la solicitud debe satisfacer la restricciones que se aplican a lahttp-method
en elurl-pattern
. Ambos de siguientes reglas deben cumplirse para que la solicitud sea aceptada y enviado al servlet asociado.
Y:
SRV.11.1 El uso de URL Caminos
Una vez recibida la petición del cliente, el contenedor Web determina la aplicación Web al que lo transmita. La aplicación Web seleccionada debe tener la más larga ruta de contexto que coincide con el inicio de la URL de solicitud. La parte coincidente de la URL es la ruta de contexto cuando mapeo para servlets.
El contenedor Web siguiente debe localizar el servlet para procesar la solicitud utilizando el procedimiento de asignación de ruta se describe a continuación .
La ruta usada para asignación a un servlet es el URL de solicitud de la solicitud oponerse menos la ruta de contexto y los parámetros de trayectoria. La asignación de ruta URL reglas siguientes se usan en orden. La primera persona compatible se utiliza sin más partidos intentaron:
- El contenedor va a tratar de encontrar una coincidencia exacta de la trayectoria de la solicitud a la ruta del servlet. Un éxito de los partidos selecciona el servlet.
- El contenedor de forma recursiva trata de hacer coincidir la más larga trayectoria en el prefijo. Esto esta hecho pisando el árbol de ruta de un directorio a la vez, utilizando el carácter ‘/’ como un separador de ruta. El partido más largo determina el servlet seleccionado.
- Si el último segmento en la ruta URL contiene una extensión (por ejemplo .jsp), el contenedor de servlets trata de hacer coincidir un servlet que se encarga de las solicitudes de la extensión. Una extensión se define como la parte del último segmento después de la última’.’ Carac- acter.
- Si ninguna de las tres reglas anteriores resultan en un partido de servlet, el contenedor intentará servir a los contenidos apropiados para el recurso solicitado. Si un "defecto" servlet se define para la aplicación, que será utilizado.
SRV.11.2 Especificación de Asignaciones
En el descriptor de despliegue de aplicaciones Web, la siguiente sintaxis se utiliza para definir asignaciones:
- Se utiliza una cadena que comienza con un carácter ‘/’ y terminando con un sufijo ‘/ *’ para la asignación de ruta.
- Una cadena comenzando con un ‘*’. Prefijo se utiliza como una asignación de extensión.
- Una cadena que contiene sólo el carácter ‘/’ indica el servlet "default" de la aplicación. En este caso, la ruta del servlet es la URI de la solicitud menos la ruta de contexto y la información de la ruta es nula.
- Todas las demás cadenas se utilizan para coincidencias exactas solamente.
Otros consejos
No tendría sentido para mí que el security-constraint / web-resource-collection / url-pattern no en relación con el servlet-mapping / url-pattern , por la siguiente razón: no puede haber varios servlet-mapping en web.xml, en cuyo caso no sería claro que servlet-mapping / url -pattern a tomar para resolver el URI relativo, eran uno. (Sólo una conjetura - No he utilizado las restricciones de seguridad en Tomcat aún).
No, no lo son respecto a la otra; no hay manera de enlazar un determinado servlet-mapping a security-constraint . Ambos se aplican a un patrón de URL dado, restricción de seguridad también se puede aplicar sólo a los métodos HTTP específicos (GET, POST, ...) por lo que son bastante independientes.
Ambos elementos se definen y describen en el Servlet especificación . Es posible que desee leer secciones SRV.12.8 por la seguridad, y los detalles sobre el elemento url-pattern.