2011-05-13 24 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的所有过滤器之后。

相关问题