概要
Spring Framework で Java のサーブレットの Filter を使ってみました
環境
- Mac OS X 10.10.3
- Eclipse Luna 4.4.1
- Spring Framework 4.1.6
- Spring Tool Suite 3.6.4
- Java 1.8.0_31
- Maven 3.2.1
サンプルプロジェクト作成
過去の記事を参考に作成してください
Spring Framework のバージョンが最新でない場合は pom.xml 「org.springframework-version」のバージョン記載部分を最新のバージョンに変更してください
Filterクラスの実行
今回は以下にクラスを作成することにします
src/main/java/com/sample/TestFilter.java
Javaのサーブレットのjavax.servlet.Filter
を implements したクラスを作成します
今回は単純に doFilter 内でデバッグログを出力するようにします
package com.sample;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class TestFilter implements Filter {
public TestFilter() {
}
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
System.out.println("start");
chain.doFilter(req, res);
System.out.println("end");
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
Filterの有効化
Filterを有効にするにはweb.xml
を修正します
STSでプロジェクトを作成した場合にはsrc/main/webapp/WEB-INF/web.xml
に以下を追記します
<filter>
<filter-name>testFilter</filter-name>
<filter-class>com.sample.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>testFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
<web-app>
配下に記載すればOKです
動作確認
プロジェクトを右クリックして「Run on Server」で起動しましょう
ブラウザで「http://localhost:8080/sample」とかにアクセスしてみましょう
※com.sample.HomeController
に定義してある @RequestMapping が実行する想定です
コンソールに以下のように表示されれば Filter が有効になっています
start
INFO : com.sample.sample.HomeController - Welcome home! The client locale is ja_JP.
end
start - end が Filter で出力しているデバッグ文でメイン処理の前に start が出力され、メイン処理の後に end が出力されていることがわかると思います
最後に
前に Spring で Interceptor を使う方法を紹介しましたが、Interceptor と Filter の使い分けとしては
- Interceptor はあるメソッドの前後で実行される処理を定義して
- Filter はある RequestMapping の前後で実行される処理を定義する
のが違いかなと思っています
粒度的には Interceptor のほうが細かい感じかなと思います
(違っていたらすいません、突っ込みお願いします)
0 件のコメント:
コメントを投稿