読者です 読者をやめる 読者になる 読者になる

プログラマでありたい

おっさんになっても、プログラマでありつづけたい

Seasar2で、AOPの使い方

プログラム

 AOPの基本的な機能はフレームワークが用意しているので、呼び出すだけで使えます。
設定すべきは、customizer.diconのみ。後は、必要とする機能を実装をすれば使えます。
デフォルトのcustomizer.diconは下記のようになっていると思います。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
	"http://www.seasar.org/dtd/components24.dtd">
<components>
	<include path="default-customizer.dicon"/>

	<!--
		Teeda-Extension の Page・Action のカスタマイズは以下のコメントを参考にしてください.
		アスペクトを設定する場合はポイントカットの指定を忘れないようにしてください.
		app.dicon で aop.dicon 等必要な dicon をインクルードしてください.
	-->
	<!--
	<component name="pageCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
		<initMethod name="addAspectCustomizer">
			<arg>"aop.traceInterceptor"</arg>
			<arg>"do.*, initialize, prerender"</arg>
		</initMethod>
	</component>
	-->

	<!--
		Dao のカスタマイズは以下のコメントを参考にしてください.
		追加するカスタマイザ名は使用する Dao に合わせて変更してください.
			S2Dao     : s2DaoCustomizer
			Uuji      : uujiCustomizer
			Kuina-Dao : kuinaDaoCustomizer
		app.dicon で各 Dao で必要な dicon をインクルードしてください.
			S2Dao     : dao.dicon
			Uuji      : uuji.dicon
			Kuina-Dao : kuina-dao.dicon
	-->
	<!--
	<component name="daoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
		<initMethod name="addCustomizer">
			<arg>traceCustomizer</arg>
		</initMethod>
		<initMethod name="addCustomizer">
			<arg>s2DaoCustomizer</arg>
		</initMethod>
	</component>
	-->

	<!--
		Dxo のカスタマイズは以下のコメントを参考にしてください.
		app.dicon で dxo.dicon をインクルードしてください.
	-->
	<!--
	<component name="dxoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
		<initMethod name="addCustomizer">
			<arg>traceCustomizer</arg>
		</initMethod>
		<initMethod name="addCustomizer">
			<arg>s2DxoCustomizer</arg>
		</initMethod>
	</component>
	-->

	<!--
		その他のカスタマイズは以下のコメントを参考にしてください.
		コンポーネント名はカスタマイズ対象に合わせて変更してください.
		app.dicon で aop.dicon 等必要な dicon をインクルードしてください.
	-->
	<!--
	<component name="xxxCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
		<initMethod name="addCustomizer">
			<arg>traceCustomizer</arg>
		</initMethod>
	</component>
	-->
</components>


 すべてのActionクラスに認証を実装したい場合は、customizer.diconに下記のように編集します。

  <component name="actionCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
    <initMethod name="addAspectCustomizer">
        <arg>"authenticationInterceptor"</arg>
        <arg>true</arg>
    </initMethod>
  </component>


そして、***.interceptorに対応する実装を追加します。

package examples.interceptor;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class AuthenticationInterceptor implements MethodInterceptor {

	public Object invoke(final MethodInvocation invocation) throws Throwable {
		if (認証処理) {
			//認証OK
			return invocation.proceed();
		} else {
			//認証NG
			return null;
		}
	}

}

具体的な実装も公開されている方もいらっしゃるので、ご参考に。
Paradigm Shift Design:AuthenticationInterceptor


割と簡単に使えるところがグッドです。