2

すべての URL で実行するフィルターを定義する WAR ファイルがあります。

<!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/blahblah

<url-pattern>/</url-pattern>URL パターンおよびのフィルタ マッピングを追加しようとしまし<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 のバグのようですが、回避策を見つけたいと思っています。誰か知ってる?

4

1 に答える 1

2

最終的に 404 エラー応答の本文を確認したところ、エラー コード SRVE0190E が表示され、この役立つページにたどり着きました。問題は、存在しないリソースに対応する 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>
于 2013-05-14T01:13:36.853 に答える