Web.xml: sont des balises url-pattern par rapport à l'autre?
-
01-10-2019 - |
Question
<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>
Ceci est un extrait de web.xml (en utilisant pour configurer un jboss / tomcat webservice). Il suffit de se demander si le url-pattern
en web-resource-collection
est par rapport à la url-pattern
dans servlet-mapping
.
La solution
Le url-pattern
utilisé pour sélectionner les contraintes pour une requête donnée ne sont pas par rapport à quoi que ce soit. Les parties intéressantes de la Servlet spec ici sont:
SRV.12.8.3 traitement des demandes
Lorsqu'un conteneur Servlet reçoit un demande, il doit utiliser l'algorithme décrit dans SRV.11.1 pour sélectionner le contraintes (le cas échéant) définies sur la
url-pattern
qui est le meilleur match pour l'URI de la requête. Si aucune contrainte ne choisi, le conteneur accepte la demande. Sinon, le conteneur détermine si la méthode HTTP la demande est limitée à la motif sélectionné. Dans le cas contraire, la demande doit être acceptée. Autrement, la demande doit répondre à la contraintes applicables à lahttp-method
auurl-pattern
. Les deux les règles suivantes doivent être remplies pour la demande soit acceptée et expédiés vers le servlet associé.
SRV.11.1 Utilisation d'URL Chemins
Dès réception d'une demande de client, le conteneur Web détermine l'application Web auquel de le transmettre. L'application Web sélectionnée doit avoir la plus longue chemin de contexte qui correspond au début de l'URL de la requête. La partie apparié de l'URL est le chemin de contexte lors de la cartographie de servlets.
Le conteneur Web doit ensuite localiser le servlet pour traiter la demande à l'aide la procédure de mappage de trajet décrit ci-dessous .
Le chemin d'accès utilisé pour la cartographie à un servlet est l'URL de demande de la demande opposer moins le chemin de contexte et les paramètres de trajet. Le chemin d'URL mapping règles ci-dessous sont utilisées dans l'ordre. Le premier match réussi est utilisé sans autre matchs essayé:
- Le conteneur va essayer de trouver une correspondance exacte du chemin de la demande au chemin du servlet. A sélectionne avec succès le servlet correspondance.
- Le conteneur va essayer récursive pour correspondre le plus long chemin préfixe. C'est fait en marchant dans l'arbre de chemin d'un répertoire à la fois, en utilisant le caractère « / » comme un séparateur de chemin. Le match le plus long détermine le servlet sélectionné.
- Si le dernier segment dans le chemin d'URL contient une extension (par exemple .jsp), le conteneur de servlet va essayer de correspondre à une servlet que les demandes de poignées pour l'extension. Une extension est définie comme étant la partie du dernier segment après le dernier ». » Char- tère.
- Si aucune des trois précédentes règles ont pour conséquence un match de servlet, le conteneur essayer de servir le contenu approprié pour la ressource demandée. Si un « défaut » servlet est défini pour l'application, il sera utilisé.
SRV.11.2 Spécification de Mappages
Dans le descripteur de déploiement d'applications Web, la syntaxe suivante est utilisée pour définir applications:
- Une chaîne commençant par un « / » caractère et se terminant par un suffixe « / * » est utilisé pour le mappage de chemin d'accès.
- Une chaîne commençant par un préfixe « *. » Est utilisé comme carte d'extension.
- Une chaîne contenant uniquement le caractère « / » indique le servlet « par défaut » de L'application. Dans ce cas, le chemin de servlet est l'URI de la requête moins le chemin de contexte et les informations de chemin est nulle.
- Toutes les autres chaînes sont utilisées pour les correspondances exactes seulement.
Autres conseils
Il me logique que le security-constraint / web-ressources collection / url-pattern pas par rapport à la servlet-mapping / url motif , pour la raison suivante: il peut y avoir plusieurs servlet-mapping dans web.xml, auquel cas il ne serait pas clair que servlet-mapping / url -pattern de prendre pour résoudre l'URI relative, ont été l'un. (Juste une supposition - Je ne l'ai pas encore utilisé les contraintes de sécurité dans tomcat).
Non, ils ne sont pas par rapport à l'autre; il n'y a aucun moyen de lier une donnée servlet-mapping sécurité contrainte . Les deux sont appliqués à un modèle d'URL donné, contrainte de sécurité peut également être appliquée uniquement aux méthodes HTTP spécifiques (GET, POST, ...) donc ils sont tout à fait indépendants.
Les deux éléments sont définis et décrits dans la Servlet spécification . Vous pouvez lire des sections SRV.12.8 sur la sécurité, et des détails sur l'élément url-pattern.