Порядок выполнения веб-фильтров в API Servlet 3.1.0 - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь выяснить, в каком порядке настроены веб-фильтры для выполнения. Я использую Servlet 3.1.0 API и Apache Tomcat 8.5.32. Я предполагаю, что они разделены на два набора: по шаблону URL и по имени сервлета. Но как контейнер сервлетов определяет, в каком порядке выбирать фильтр из каждого набора? Я сделал тест с аннотацией @WebFilter точно с двумя одинаковыми фильтрами, которые различаются по имени. Я обнаружил, что сначала выполняется фильтр с именем «filterD», затем - «filterB». Затем я попытался изменить порядок, разместив простую конфигурацию в файле web.xml следующим образом:

<filter-mapping>
    <filter-name>filterB</filter-name>
    <url-pattern />
</filter-mapping>
<filter-mapping>
    <filter-name>filterD</filter-name>
    <url-pattern />
</filter-mapping>

Я все еще вижу, что filterD выполняется перед filterB. Почему так происходит? Эти два фильтра настроены так:

@WebFilter(filterName = "filterB", urlPatterns = "/hello")
@WebFilter(filterName = "filterD", urlPatterns = "/hello")
...