Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: saplingProОтветов: 2

Прежде чем, наконец, перейти к сервлету 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 -->
  • это не работает? это выглядит хорошо для меня. jeff 03.09.2012

javaservletsservlet-filters

Ответы

Ответ 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. фильтр 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());
    }

}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы