我有一个包含此文件的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>
标记在我环境的某些方面的上下文中不起作用。
是否有其他人看过这个或知道可能导致此问题的原因?
答案 0 :(得分:1)
可能是因为您在使用servlet-name设置过滤器时更改了过滤器的顺序。 servlet容器将按照在web.xml中配置的顺序运行过滤器,首先是使用url-pattern然后使用servlet-name的过滤器。所以使用url-pattern的过滤器总是在使用servlet-name之前执行。
因此,通过将其更改为使用servlet-name,您可以使用url-pattern将其放置在所有过滤器之后。