Я пытаюсь выяснить, в каком порядке настроены веб-фильтры для выполнения. Я использую 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")