web.xml <filter-mapping>在使用<servlet-name> </servlet-name> </filter-mapping>时不起作用

时间:2011-05-13 20:07:47

标签: java spring servlet-filters web.xml

我有一个包含此文件的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 个答案:

答案 0 :(得分:1)

可能是因为您在使用servlet-name设置过滤器时更改了过滤器的顺序。 servlet容器将按照在web.xml中配置的顺序运行过滤器,首先是使用url-pattern然后使用servlet-name的过滤器。所以使用url-pattern的过滤器总是在使用servlet-name之前执行。

因此,通过将其更改为使用servlet-name,您可以使用url-pattern将其放置在所有过滤器之后。