Java Servlet Filter

サーバのメンテナンス,再起動の際,Tomcat のデプロイをテキトーにやったためか,限定公開の表記変換プログラムが丸見えになっていたらしい。開発機 Mac OS X で作ったプログラムを公開機 FreeBSD に載せるのだが,セキュリティなどの設定の違いで開発機の定義ファイルを公開機に持って行きそのまま使うとノーセキュリティで外に出てしまう。ま,プライベートの遊びなんでどうってことはないのだけれども,遊びのついでに,同じ設定で Java Servlet を両方の機械で動かすように変更した。

公開機ではこれまで限定公開の Java Servlet に対し Tomcat の BASIC 認証で制限を掛けていた。web.xml デプロイメント・ディスクリプタの <security-constraint> タグに role やら method やらごちゃごちゃ定義すると,アプリの作りとは関係なく,当該 Servlet 環境(Servlet やこれを動かすためのフォーム HTML 等)にアクセスすると Tomcat がユーザ認証を肩代わりしてくれるのである。これはとても便利なのだが,デバッグ時にいちいち認証応答するのもメンドウなので,開発機ではこの定義を外していた。

今回 Java Servlet の Filter 機能を利用し,自分で認証を行うアプリを書いてみた。Filter 機能というのは,ある Servlet A に対して Filter として動作するアプリ B を指定しておくと,A が要求されたとき B を実行した上で A に制御を渡すことのできる Tomcat の仕組みである。その要求が許可を得たものであるのかをチェックし,そうでなければ A を実行せず別の Servlet C に要求を渡すなどができる。Servlet 間でデータを共有するには Tomcat セッション管理機構や ServletContext 機能を併用することになる。

Filter 機能の詳細については,「Java の道:Servlet-10.フィルタ」などのやさしく解説してくれるサイトを参考にしながら,Tomcat Servlet API ドキュメントをお読みください。