【问题标题】:web.xml <filter-mapping> not working when using <servlet-name>web.xml <filter-mapping> 在使用 <servlet-name> 时不起作用
【发布时间】:2011-08-25 05:28:48
【问题描述】:

我有一个 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 就好像它不存在并且没有一个错误或其他东西输出。

好像&lt;servlet-name&gt; 标签在我的环境的某些方面不起作用。

有没有其他人看到过或者知道是什么原因造成的?

【问题讨论】:

    标签: java spring servlet-filters web.xml


    【解决方案1】:

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

    因此,通过将其更改为使用 servlet-name,您实际上是在使用 url-pattern 的所有过滤器之后放置它。

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 2012-06-07
      • 2011-03-16
      • 1970-01-01
      • 2015-02-01
      • 2012-08-22
      • 2016-11-07
      • 2014-05-27
      • 2012-09-18
      相关资源
      最近更新 更多