сопоставление одного фильтра с другим фильтром до достижения сервлета

Прежде чем, наконец, перейти к сервлету 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 -->

person saplingPro    schedule 03.09.2012    source источник
comment
это не работает? это выглядит хорошо для меня.   -  person jeff    schedule 03.09.2012


Ответы (2)


Порядок записей <filter-mapping> в файле web.xml определяет их порядок в цепочке фильтров.

Так как у вас это, они должны быть связаны в нужном порядке.

Однако рекомендуется сделать ваши фильтры независимыми от этого порядка.

person Don Roby    schedule 03.09.2012
comment
и как я могу сделать его независимым? - person saplingPro; 03.09.2012

С этой конфигурацией

<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. фильтр 1
  2. фильтр 2
  3. s2
  4. фильтр 2
  5. фильтр 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());
    }

}
person jddsantaella    schedule 03.09.2012
comment
как он сможет отфильтровать 2, а затем отфильтровать 1 на четвертом и пятом шагах? Я не изменил объект ответа - person saplingPro; 03.09.2012
comment
Возьмем в качестве примера filter1. На шаге 1 выполняется код о chain.doFilter(...). В шаге 5 код после. Итак, если после chain.doFilter(...) нет кода, ничего не делается - person jddsantaella; 04.09.2012