web.xml <filter-mapping> не работает при использовании <servlet-name> - PullRequest
3 голосов
/ 14 мая 2011

У меня есть web.xml, в котором есть это:

 <filter>
    <description>CASRebroadcastFilter</description>
    <filter-name>CASRebroadcastFilter</filter-name>
    <filter-class>edu.utah.acs.tek.filters.CASSingleSignOutRebroadcast</filter-class>
</filter>

(... more CAS-filters)

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

<filter-mapping>
    <filter-name>CASRebroadcastFilter</filter-name>
    <url-pattern>*.do</url-pattern>        
</filter-mapping>

(... more CAS-filter-mappings and the rest of my web.xml...)

Среда: Spring 2.5, Glassfish 2.1

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

Но если я изменю свое сопоставление фильтра на следующее:

<filter-mapping>
    <filter-name>CASRebroadcastFilter</filter-name>
    <servlet-name>dispatcher</servlet-name>
</filter-mapping>

Это не сработает.И под «не работает» я имею в виду именно это: все проходит через CASRebroadcastFilter, как будто его просто нет, и не выводится ни одной ошибки или чего-то другого.

Это как если бы тег <servlet-name> простоне работает в контексте какого-либо аспекта моего окружения.

Кто-нибудь еще видел это или знает, что может быть причиной этого?

1 Ответ

1 голос
/ 26 сентября 2011

Может быть из-за того, что вы меняете порядок фильтров, когда устанавливаете его, используя имя сервлета.Контейнер сервлета будет запускать фильтры в том порядке, в котором они настроены в web.xml, сначала те, которые используют шаблон URL, а затем те, которые используют имя сервлета.Таким образом, фильтр, использующий шаблон url, всегда выполняется перед фильтром с именем сервлета.

Таким образом, изменяя его на использование имени сервлета, вы фактически размещаете его после всех фильтров, использующих шаблон URL.

...