Como definir a ordem de execução do filtro de servlet usando anotações no WAR
167
Se definirmos os filtros de servlet específicos do aplicativo da web no próprio WAR web.xml, a ordem de execução dos filtros será a mesma da ordem em que eles são definidos no web.xml.
Mas, se definirmos esses filtros usando @WebFilteranotação, qual é a ordem de execução dos filtros e como podemos determinar a ordem de execução?
Você realmente não pode definir a ordem de execução do filtro usando a @WebFilteranotação. No entanto, para minimizar o web.xmluso, basta anotar todos os filtros com apenas um filterNamepara que você não precise da <filter>definição, mas apenas <filter-mapping>na ordem desejada.
eles poderiam ter introduzido um orderatributo de uma @WebFilterMappinganotação aninhada . Pergunto-me se a não fazê-lo pela simplicidade
Bozho
12
@ Ozoz: Isso não seria específico o suficiente. E se o seu aplicativo da web for fornecido com bibliotecas de terceiros que incluem um filtro? É difícil dizer a ordem de antemão.
BalusC
1
@ BalusC: Algo deu errado no seu exemplo: o padrão de URL é fechado com um nome de filtro.
AndrewBourgeois
3
@AndrewBourgeois: Fixed. Foi um erro de copypaste. Pena que editor Markdown não tem incorporado a validação XML como como em Eclipse;)
BalusC
6
O uso <url-pattern />não funciona no JBoss EAP 6.1 - substitui o @WebFiltervalor e impede a execução do filtro.
Seanf 21/10
12
A especificação do Servlet 3.0 não parece fornecer uma dica sobre como um contêiner deve solicitar filtros que foram declarados por meio de anotações. No entanto, é claro como solicitar filtros por meio de sua declaração no arquivo web.xml.
Esteja a salvo. Use os filtros de ordem de arquivo web.xml que têm interdependências. Tente tornar seus filtros todos os pedidos independentes para minimizar a necessidade de usar um arquivo web.xml.
Eu tenho muitos filtros Servlet no meu projeto, deles apenas um filtro específico deve ser chamado primeiro e a ordem de outros filtros não é uma preocupação. Tenho que contaminar todos os filtros no web.xml? Ou existem atalhos?
order
atributo de uma@WebFilterMapping
anotação aninhada . Pergunto-me se a não fazê-lo pela simplicidade<url-pattern />
não funciona no JBoss EAP 6.1 - substitui o@WebFilter
valor e impede a execução do filtro.A especificação do Servlet 3.0 não parece fornecer uma dica sobre como um contêiner deve solicitar filtros que foram declarados por meio de anotações. No entanto, é claro como solicitar filtros por meio de sua declaração no arquivo web.xml.
Esteja a salvo. Use os filtros de ordem de arquivo web.xml que têm interdependências. Tente tornar seus filtros todos os pedidos independentes para minimizar a necessidade de usar um arquivo web.xml.
fonte