2011-05-13 51 views
3

我有了這在它一個web.xml:的web.xml <濾波器映射>不工作<servlet的名稱>

<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...) 

環境:春2.5,2.1 Glassfish的

而且這個按預期工作 - 即CASRebroadcastFilter攔截並處理適當的呼叫,並允許其他一切通過。

但是,如果我改變我的過濾器映射到這一點:

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

它不工作。而「不起作用」的意思就是:所有東西都經過CASRebroadcastFilter,就好像它不在那裏一樣,並且沒有輸出任何錯誤或其他東西。

就好像<servlet-name>標籤在我的環境的某個方面的環境中不起作用。

有沒有其他人看過這個或知道可能是什麼原因造成的?

回答

1

可能是由於您在使用servlet-name設置過濾器時更改了過濾器的順序。 servlet容器將按照它們在web.xml中配置的順序運行過濾器,首先是使用url-pattern的那些過濾器,然後是使用servlet-name的過濾器。所以使用url-pattern的過濾器總是在使用servlet-name之前執行。

因此,通過將其更改爲使用servlet-name,您可以將其放在使用url-pattern的所有過濾器之後。

相關問題