WebSphere Application Serverで全URLにServlet Filterを適用するには
たとえば、全URLにFilterをひっかけるためにweb.xmlにこんな感じの定義をします。
: : <filter> <filter-name>myfilter</filter-name> <filter-class>hoge.foo.MyFilter</filter-class> </filter> : : <filter-mapping> <filter-name>myfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> : :
で、こんなURLでアクセスします。
http://hostname/contextroot/add/
Tomcatでは問題なくMyFilterクラスのdoFilterメソッドが呼び出されるので、WebSphereでも同じように動くことを期待してしまいますが、
実際は「Error 404: SRVE0190E: ファイルが見つかりません: {0}」とか言われてMyFilterクラスのdoFilterメソッドは呼ばれません。
これを避けるには、管理コンソールを開いて、「アプリケーション・サーバー」 > 「server1」 > 「Web コンテナー」 > 「カスタム・プロパティー」とページをたどり、 com.ibm.ws.webcontainer.invokefilterscompatibility
というプロパティに true
を設定します。
どこかのバージョンで仕様が変更されたためにこのようにしないといけないみたいですね。ちょっと面倒ですね。
確認したのはWASの6.1.0.15というバージョンで、現時点でたぶん最新のもの。
関連情報
くわしくはここを読んでみて。
PK33090: A FILTER THAT SERVES EVERY FILE *.JS DOES NOT POPUP AN ALERT MESSAGE