Web.xml: sono i tag url-modello rispetto all'altro?
-
01-10-2019 - |
Domanda
<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>
Questo è un estratto da web.xml (usarlo per configurare un jboss / tomcat webservice). Chiedo solo se il url-pattern
in web-resource-collection
è relativo al url-pattern
in servlet-mapping
.
Soluzione
Il url-pattern
utilizzato per selezionare i vincoli per una data richiesta non sono relative a nulla. Le parti interessanti della Servlet spec qui sono:
SRV.12.8.3 elaborazione delle richieste
Quando un contenitore Servlet riceve un richiesta, essa utilizza l'algoritmo descritto in SRV.11.1 per selezionare la vincoli (se presenti) definite sulla
url-pattern
che è la migliore corrispondenza per l'URI della richiesta. Se vincoli sono selezionato, il contenitore accetta la richiesta. Altrimenti il ??contenitore determina se il metodo HTTP la richiesta è vincolato al disegno selezionato. Se non lo è, il richiesta deve essere accettata. Altrimenti, la richiesta deve soddisfare il vincoli che si applicano alhttp-method
alurl-pattern
. Entrambi i seguenti regole devono essere soddisfatti per la richiesta di essere accettata e spediti verso il servlet associato.
E
SRV.11.1 L'utilizzo di URL Percorsi
Al ricevimento di una richiesta del cliente, il contenitore Web determina l'applicazione Web a cui di trasmetterla. L'applicazione Web selezionato deve avere la più lunga percorso del contesto che corrisponde l'inizio della URL richiesta. La parte corrispondenti dell'URL è il percorso del contesto in cui la mappatura di servlet.
Il contenitore Web prossima deve individuare il servlet per elaborare la richiesta utilizzando la procedura di mappatura percorso descritta di seguito .
Il percorso utilizzato per la mappatura di un servlet è l'URL della richiesta dalla richiesta oggetto meno il percorso di contesto ei parametri di percorso. La mappatura sentiero URL regole di seguito sono utilizzati allo scopo. Il primo successo di abbinamento viene utilizzato senza ulteriori partite tentato:
- Il contenitore cercherà di trovare una corrispondenza esatta del percorso della richiesta al percorso del servlet. Un successo di abbinamento seleziona il servlet.
- Il contenitore in modo ricorsivo cercare di far corrispondere il più lungo percorso-prefix. Questo è fatto facendo un passo verso il basso l'albero percorso di una directory alla volta, utilizzando il carattere ‘/’ come un separatore di percorso. La partita più lunga determina la servlet selezionato.
- Se l'ultimo segmento nel percorso URL contiene un'estensione (per esempio .jsp), il contenitore di servlet cercherà di abbinare un servlet che gestisce le richieste per l'estensione. Un'estensione è definita come la parte dell'ultimo segmento dopo l'ultimo’.’ Carat- acter.
- Se nessuna delle precedenti tre regole si traducono in un match servlet, il contenitore tentare di servire contenuti adeguati per la risorsa richiesta. Se un "default" servlet è definito per l'applicazione, verrà utilizzato.
SRV.11.2 specificazione di Mapping
Nel descrittore di deployment delle applicazioni Web, la seguente sintassi viene utilizzata per definire mappature:
- Una stringa che inizia con un carattere ‘/’ e termina con un suffisso ‘/ *’ è usato per la mappatura percorso.
- Una stringa che inizia con un ‘*.’ Prefisso è usato come una mappatura estensione.
- Una stringa contenente solo il carattere ‘/’ indica il servlet "default" di l'applicazione. In questo caso il percorso servlet è la richiesta URI meno il percorso del contesto e le informazioni percorso è nullo.
- Tutte le altre stringhe sono usati per corrispondenze esatte solo.
Altri suggerimenti
Non avrebbe senso per me che il security-constraint / web-resource-raccolta / url-pattern è non relativo al servlet-mapping / url-pattern , per il seguente motivo: ci possono essere diverse servlet-mapping elementi in web.xml, nel qual caso non sarebbe chiaro quale servlet-mapping / url -pattern a prendere per risolvere l'URI relativo, erano uno. (Solo una supposizione - non ho ancora usato vincoli di sicurezza in Tomcat).
No, non sono l'uno rispetto all'altro; non v'è alcun modo per associare un determinato servlet-mapping per un security-constraint . Entrambi sono applicati a un determinato modello di URL, vincolo di sicurezza può anche essere applicato solo a specifici metodi HTTP (GET, POST, ...) in modo che siano del tutto indipendenti.
Entrambi gli elementi sono definiti e descritti nella servlet specifica . Si potrebbe desiderare di leggere le sezioni SRV.12.8 sulla sicurezza, e dettagli circa l'elemento url-pattern.