2015年6月9日火曜日

Spring で Interceptor を使う方法

概要

過去の記事でEclipse + Springでサンプルプロジェクトが動作するところまで紹介しました
今回はそのサンプルプロジェクトを使って「Interceptor」という仕組みを試してみました

環境

  • Mac OS X 10.10.3
  • Eclipse Luna 4.4.1
  • Spring Framework 4.1.6
    ※それ以外のバージョンは過去の記事に書いてあるバージョンと同じです

サンプルプロジェクト作成

過去の記事を参考に作成してください
Spring Framework のバージョンが最新でない場合は pom.xml 「org.springframework-version」のバージョン記載部分を最新のバージョンに変更してください

Interceptor実装

そもそも Interceptor って何という話ですが、簡単に言うとある処理をする前後に任意の処理を実行させる仕組みのことです
共通処理等で使われることが多く、例えばロギングやシリアライズを必ず実施しなければいけない場合で使われます

servlet-context.xml の修正

servlet-context.xmlsrc/main/webapp/WEB-INF/spring/appServlet/servlet-context.xmlにあります
ここにInterceptorを使用する定義を記載します

<!-- for Interceptor -->
<mvc:interceptors>
  <mvc:interceptor>
    <mvc:mapping path="/**" />
    <beans:bean class="com.sample.test.RequestInterceptor" />
  </mvc:interceptor>
</mvc:interceptors>

ポイントはpathの部分とclassの部分です
pathで指定したURIにアクセスした場合にclassで指定したInterceptorクラスのメソッドが実行されます

The prefix “mvc” for element “mvc:interceptors” is not bound.

というエラーが出る場合は servlet-context.xml の冒頭のbeansタブに以下を記載してください

xmlns:mvc="http://www.springframework.org/schema/mvc"

Interceptor クラスの実装

今回はcom.sample.test.RequestInterceptorというクラスを作成してAPIのメイン処理に入る前にリクエスト情報をダンプしてみたいと思います

package com.sample.test;

import java.util.Collections;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class RequestInterceptor extends HandlerInterceptorAdapter {

  @SuppressWarnings("unchecked")
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    System.out.println("Dumping request parameters");
    for (Object name : Collections.<Object>list(request.getParameterNames())) {
      String value = request.getParameter((String) name);
      System.out.println(name.toString() + ":" + value);
    }
    return true;
  }
}

true を return することで次の処理に移ります
false を指定すると次の処理には行かずこの処理で終了します

とりあえず上記ではリクエスト時のパラメータ情報をSystem.outしているだけです
ここまで作成できればあとは実行するだけです

動作確認

プロジェクトを右クリックして「Run on Server」でアプリを起動してみましょう

http://localhost:8080/test/?hoge=fuga
という感じでアクセスすると Eclipse のコンソールに

Dumping request parameters
hoge:fuga

という感じで出力されると思います

紹介は以上です
Interceptor は便利な機能だと思います

0 件のコメント:

コメントを投稿