WebSphere 7.0 不会运行根 URL 过滤器

标签 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>

该过滤器旨在执行从“方便”URL 到相应“实际”URL 的一些重定向,但我认为这与问题并不真正相关。

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

我尝试为 URL 模式添加额外的过滤器映射 <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 的一个错误,但我仍然想找到解决方法。有人知道吗?

最佳答案

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

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

com.ibm.ws.webcontainer.invokefilterscompatibility=true

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

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

关于WebSphere 7.0 不会运行根 URL 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16528784/

相关文章:

java - WebSphere 将更改传播到集群中的所有节点

java - 从字符串动态转换对象

java - 不了解WAS连接池通过JNDI的数据库连接

jakarta-ee - JavaEE6 启用/禁用 webfilter 无需重新编译

java - 如何修复 "The Resource Bundle Must Containt Title"错误?

java - JSPG0122E : Unable to parse EL function in Websphere 7

java - 如何在 servlet 中获取 WebSphere ConfigService?

java - 如何为在 Eclipse 中创建的应用程序将 WebSphere 类加载器策略设置为 PARENT_LAST?

jms - 使用 DefaultMessageListenerContainer 连接到 WebSphere MQ 重复抛出 "Connection closed"

java - 关于 CsrfPreventionFilter 的 tomcat 错误是什么意思?