2.4. フィルターの作成

2.4.1. フィルターとは

フィルターは、HTTPリクエストやHTTPレスポンス、ヘッダ情報などの内容を変換する、再利用可能なオブジェクトで、Servlet2.3仕様より導入されています。フィルターの利用例を以下に挙げます。
これら以外にも、用途に応じていろいろなフィルターを開発することができます。

2.4.2. フィルターのインタフェース

フィルターはjavax.servlet.Filterインタフェースを実装して作成します。jakarta.servlet.Filterインタフェースで実装しなければならないメソッドには以下のものがあります。
表2.2.4.2-1
メソッド
説明
void init(FilterConfig filterConfig)
throws ServletException
初期化メソッドです。フィルター処理が開始される際にWebコンテナによって1度だけ呼び出されます。
void doFilter(ServletRequest request, ServletResponseresponse, FilterChain chain)
throws java.io.IOException,ServletException
フィルターが適用されるリクエストがあるたびに呼び出されるメソッドです。このメソッドでリクエストやレスポンス、ヘッダ情報を加工する処理を実装します。『chain.doFilter()』で次のフィルター、もしくは、リソースに処理を渡します。
void destroy()
フィルター処理の終了の際にWebコンテナによって呼び出されるメソッドです。
jakarta.servlet.Filterインタフェースの他に、フィルター関連のインタフェースとして、jakarta.servlet.FilterChainインタフェースとjakarta.servlet.FilterConfigインタフェースがあります。

2.4.3. フィルターの定義

作成したフィルターを、web.xmlにfilter要素とfilter-mapping要素で定義します。 filter要素でフィルターのクラス名とフィルターの名前(web.xml内で一意)を定義し、filter-mapping要素でフィルターをどのURL、もしくは、Servletにマッピングするかを定義します。以下にフィルターの定義例を記載します。
<filter>
  <filter-name>TestFilter</filter-name>
  <filter-class>filter.TestFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>TestFilter</filter-name>
  <url-pattern>/TestServlet</url-pattern>
</filter-mapping>
この例では、filter.TestFilterTestFilterという名前で定義し、 /TestServletと言うURLでアクセスすることでTestFilterのフィルター処理が行われるよう定義しています。

2.4.4. フィルターウィザード

フィルターウィザードでは、フィルターを作成して、さらに、Webプロジェクト中のweb.xmlファイルに作成するフィルターの定義を追加することができます。
メニュー ファイル新規その他 を選択して、新規画面のWeb配下のフィルターを選択して、次へをクリックします。


図2.2.4.4-1

この画面では、Webプロジェクトで作成したWebプロジェクトを指定することができます。ソース・フォルダーにWebプロジェクトのソース・フォルダーを指定することができます。また、フィルターのjavaパッケージクラス名スーパークラスを指定することができます。


図2.2.4.4-2

入力項目は以下の通りです。
表2.2.4.4-1
名称
説明
プロジェクト
Webプロジェクト名です。
ソース・フォルダー
Webプロジェクトのソース・フォルダーです。
Javaパッケージ
フィルターのJavaパッケージです。
クラス名
フィルターのクラス名です。
スーパークラス
フィルターの継承するスーパークラスです。
既存フィルター・クラスを使用
既存フィルター・クラスを使用する場合に、指定します。
次へをクリックすると、フィルターのデプロイメント記述子固有の情報入力画面が表示されます。


図2.2.4.4-3

入力項目は以下の通りです。
表2.2.4.4-2
名称
説明
名前
@WebFilterアノテーションのfilterName属性の値となります。
または、filter要素とfilter-mapping要素の子要素であるfilter-name要素の値となります。
説明
@WebFilterアノテーションのdescription属性の値となります。
または、filter要素の子要素であるdescription要素の値となります。
初期化パラメーター
@WebFilterアノテーションのinitParams属性の値となります。
または、filter要素の子要素であるinit-param要素の定義を編集できます。
フィルター・マッピング
@WebFilterアノテーションのurlPatterns属性及びdispatcherTypes属性の値となります。
または、filter-mapping要素の子要素であるurl-pattern及びdispatcher要素の値となります。

Memo
Servlet2.5以下の場合、デプロイメント記述子固有情報がweb.xmlに記入されます。
Servlet3.0以上の場合、デプロイメント記述子固有情報がフィルタークラスの @WebFilterアノテーションに記入されます。

名前URLパターン/サーブレット名は必須です。

初期化パラメーターの右側の追加をクリックすると初期化パラメーターダイアログが表示されます。 この画面では初期化パラメーターを追加することができます。


図2.2.4.4-4

入力項目は以下の通りです。
表2.2.4.4-3
名称
説明
名前
@WebInitParamアノテーションのname属性の値、またはparam-name要素の値になります。

@WebInitParamアノテーションのvalue属性の値、またはparam-value要素の値になります。
説明
@WebInitParamアノテーションのdescription属性の値、またはdescription要素の値になります。

フィルター・マッピングの右側の追加をクリックするとフィルター・マッピングダイアログが表示されます。この画面ではフィルター・マッピングを追加することができます。


図2.2.4.4-5

入力項目は以下の通りです。
表2.2.4.4-4
名称
説明
パターン
@WebFilterアノテーションのurlPatterns属性の値となります。
または、filter-mapping要素の子要素であるurl-pattern要素の値となります。
Select Dispathcers
@WebFilterアノテーションのdispatcherTypes属性の値となります。
または、filter-mapping要素の子要素であるdispatcher要素の値となります。

フィルターのデプロイメント記述子固有の情報入力画面で次へをクリックすると、以下の画面が表示されます。この画面では、フィルターの修飾子、実装するインタフェースを指定することができます。


図2.2.4.4-6