ログ出力インターセプターの実装

ログをDB(PostgreSQL)に出力する実装をした。
今までインターセプターを使わずに

	@Execute(validator = false)
	public String index() {
		try {
			// 絵文字の設定をする。
			init(request, context);

			// アクセスカウンターにアクセスする
			counter = tNumService.getAccessCounter();

			// 管理者リンクの表示有無
			visibleadmin = Utils.isAdmin(request);

			// ログ出力
			tlogService.insertLog(request);

			return pageIndex;
		} catch(Exception e) {

			// 例外処理
			procException(request, e);
			return "/error.jsp";

		}
	}

という風に

			// ログ出力
			tlogService.insertLog(request);

を各アクションに入れて対応していました。
理由は、Interceptorの導入方法がわからないから(公式ページを見てもわからなかった)
ネットで調べてみていろいろ試行錯誤して、aop.diconを作ってみたり、app.diconを変更してみたりしたけれども、結局diconファイルを一切弄わないでいいようでした^^;

まずInterceptorしたい関数に以下のようにアノテーションを追加する。

	@Execute(validator = false)
	@Aspect("loggerInterceptor")
	public String index() {

そしてinterceprtorパッケージに以下のようなクラスを作成する

public class LoggerInterceptor extends AbstractInterceptor {
	private static final long serialVersionUID = 1L;

	public HttpServletRequest request;
	public JdbcManager jdbcManager;

	public Object invoke(final MethodInvocation invocation) throws Throwable {
		 // 対象のクラス
		String actonName = getTargetClass(invocation).getName().replaceAll("\\.", "/");

		// 対象のメソッド
		String methodName = invocation.getMethod().getName();

		TLog log = new TLog();

		log.crtdt = new Timestamp(System.currentTimeMillis());
		log.action = actonName +"/" + methodName;
		log.useragent = Utils.getAllHeader(request);
		log.body = Utils.getAllParameter(request);

		System.out.println(log.useragent);
		System.out.println(log.body);

		jdbcManager.insert(log).execute();

		return invocation.proceed();
	}
}

とするだけで、インターセプトしてくれました^^
requestにはインターセプト前のものが入っていました。
これでちょっとシンプルになった。後は例外時のインターセプトだ!