WebSphere 7.0不会为根URL运行过滤器

时间:2013-05-13 18:33:30

标签: websphere servlet-filters websphere-7

我有一个WAR文件,用于定义在所有URL上运行的过滤器:

<!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
...
<filter>
    <filter-name>OurRedirectServletFilter</filter-name>
    <filter-class>com.mycompany.RedirectServletFilter</filter-class>
</filter>
...
<filter-mapping>
    <filter-name>OurRedirectServletFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

过滤器旨在执行从“便利”网址到相应“实际”网址的一些重定向,但我认为这与问题无关。

在WebSphere 7.0上,此过滤器不会针对根URL的请求运行,例如/ctxroot/ctxroot/;相反,我只得到404响应。 /ctxroot/blah运行,无论blah是有效路径还是无效路径。

我已尝试为网址格式<url-pattern>/</url-pattern><url-pattern></url-pattern>添加其他过滤器映射,但我也有同样的行为。

我已在基础WAS 7.0.0.0上测试,并且已应用最新的修订包,即WAS 7.0.0.27。

过滤器在WAS 8.5上按预期工作,我非常肯定在WAS 8.0上,以及我尝试过的每个版本的WebLogic,JBoss和Tomcat。这似乎是WAS 7.0的一个错误,但我仍然想找到一个解决方法。谁知道一个?

1 个答案:

答案 0 :(得分:2)

我最终查看了404错误响应的正文,并看到错误代码SRVE0190E,这导致我this helpful page。问题是默认情况下,对于与不存在的资源相对应的URL,不会调用过滤器(尽管我发誓我为上下文根目录以外的URL测试过,并调用了我的过滤器。)

可以通过设置链接页面中进一步描述的自定义属性来配置WebSphere以在这种情况下调用过滤器:

com.ibm.ws.webcontainer.invokefilterscompatibility=true

我还发现,对于上下文根URL的情况,在welcome-file中设置映射到现有资源的web.xml条目会导致调用过滤器:

<welcome-file-list>
    <welcome-file>fakehome.html</welcome-file>
</welcome-file-list>