Прежде чем, наконец, перейти к сервлету s2, я хочу пройти через 2 фильтра: фильтр 1, а затем фильтр 2 по порядку. Ниже приведен файл xml, который выполняет это сопоставление, но я не знаю, как сопоставить фильтр-1 с фильтром-2, а затем с сервлетом-2. Как мне изменить этот xml, чтобы отобразить мой путь?
<!-- filter tags -->
<filter>
<filter-name>Filter-1</filter-name>
<filter-class>Filters.Filter_1</filter-class>
</filter>
<filter>
<filter-name>Filter-2</filter-name>
<filter-class>Filters.Filter_2</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter-1</filter-name>
<servlet-name>s2</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>Filter-2</filter-name>
<servlet-name>s2</servlet-name>
</filter-mapping>
<!-- end of filter tags -->
Ответ 1 · Don Roby
Порядок записей <filter-mapping> в файле web.xml определяет их порядок в цепочке фильтров.
Так как у вас это, они должны быть связаны в нужном порядке.
Однако рекомендуется сделать ваши фильтры независимыми от этого порядка.
Ответ 2 · jddsantaella
С этой конфигурацией
<filter-mapping>
<filter-name>Filter-1</filter-name>
<servlet-name>/*</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>Filter-2</filter-name>
<servlet-name>/*</servlet-name>
</filter-mapping>
Если вы запрашиваете /s2, ваш запрос будет следовать следующим шагам:
- фильтр 1
- фильтр 2
- s2
- фильтр 2
- фильтр 1
Ознакомьтесь с документом.
Код вашего фильтра должен выглядеть так:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
try {
// your code for step 1 or 2
chain.doFilter(request, response);
// you code for step 4 or 5
} catch (Exception e) {
log.error("error" + e.toString());
}
}