Выполняется ли doFilter () до или после завершения работы сервлета? - PullRequest
24 голосов
/ 24 августа 2009

Объект javax.servlet.Filter может использоваться как для аутентификации (когда фильтру необходимо перехватить запрос до выполнения какой-либо работы сервлета), так и для трансляции XSLT (где сервлету быть полностью законченным генерацией контента). Когда он на самом деле исполняется?

Я знаю, что это зависит от реализации (от веб-контейнера), но, похоже, это проблема, которая должна быть решена всеми из них.

Может быть, где-то установлена ​​опция конфигурации для каждой регистрации фильтра в веб-контейнере?

Дополнительно:

Кроме того, что определяет порядок выполнения фильтра? Почему FooFilter исполняется до BarFilter?

Ответы [ 3 ]

51 голосов
/ 24 августа 2009

Цепочка фильтров по сути обертывает вызов сервлета. Цепочка будет обрабатывать все ссылки до тех пор, пока не достигнет «дна», затем разрешит запуск сервлета и затем вернется вверх по цепочке в обратном порядке. Например, если у вас есть новый «пример фильтра», ваш метод doFilter () может выглядеть так:

public void doFilter(ServletRequest request,
      ServletResponse response, FilterChain chain) 
      throws IOException, ServletException {
// do pre-servlet work here
chain.doFilter(request, response);
// do post servlet work here

}
7 голосов
/ 24 августа 2009

альтернативный текст http://img228.imageshack.us/img228/8945/filter.png

О порядке: как я помню из спецификации, сервлет-контейнер не гарантирует, что фильтры будут вызываться в каком-то порядке.

0 голосов
/ 29 сентября 2015

В соответствии со спецификацией servlet2.3 фильтр выполняется в соответствии с конфигурацией web.xml последовательности отображения фильтра Ref- http://www.programering.com/a/MTMyADOwATI.html

...