[Seasar-user:9232] Re: [Teeda]PageクラスへのAOP

Junichi Kato [E-MAIL ADDRESS DELETED]
2007年 7月 18日 (水) 20:14:27 JST


どうもです,加藤(j5ik2o)です.

AuthorityInterceptorに当たる部分は,以下のように実装しています.
CurrentUserDtoは,認証後に保持しておくユーザ情報です.

public class UserLoginInterceptor implements MethodInterceptor {

	private CurrentUserDto currentUserDto;

	public Object invoke(MethodInvocation invocation) throws Throwable {
		if (currentUserDto != null) {
			if (currentUserDto.isAuthed() == true) {
				return invocation.proceed(); // 認証に成
功しているなら,本来の処理を呼び出す
			}
		}
		return "userLogin"; // 認証が無効ならログイン画面に飛ば
す
	}

	public void setCurrentUserDto(CurrentUserDto currentUserDto) {
		this.currentUserDto = currentUserDto;
	}

}

@Component(instance = InstanceType.SESSION)
public class CurrentUserDto {
	private String userId;
	private boolean authed;
// setter,getter省略
}

で,実際どのページにAOPを適用するかについては,customizer.diconで指定し
てください.
addClassPatternで,AOPをかけたいページクラスを指定してください.
pointcutプロパティをprerenderに変更すればprerenderだけにAOPを適用できま
す.
ちなみに,useLookupAdapterプロパティがtrueになっていないとCOOL deploy時
に問題が発生します.
https://ml.seasar.org/archives/seasar-user/2007-April/009196.html
http://www.seasar.org/wiki/index.php?FAQ%2FS2AOP#q69751d4

	<component name="userLoginAspectCustomizer" class="org.seasar.framework.container.customizer.AspectCustomizer">
		<property name="useLookupAdapter">true</property>
		<property name="pointcut">"initialize"</property>
		<property name="interceptorName">"userLoginInterceptor"</property>
		<initMethod name="addClassPattern">
			<arg>"org.hogehoge.web"</arg>
			<arg>".*Page"</arg>
		</initMethod>
		<initMethod name="addIgnoreClassPattern">
			<arg>"org.hogehoge.web"</arg>
			<arg>".*LoginPage"</arg>
		</initMethod>
	</component>

	<component name="pageCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
		<initMethod name="addCustomizer">
			<arg>userLoginAspectCustomizer</arg>
		</initMethod>
		<initMethod name="addCustomizer">
			<arg>pageSupportAspectCustomizer</arg>
		</initMethod>
	</component>

たぶん,これだけで期待した通りに実装できると思います.
不明な点があればまた聞いてください.


On Wed, 18 Jul 2007 19:54:03 +0900
shibuya kumiko <[E-MAIL ADDRESS DELETED]> wrote:

> 
> はじめまして、渋谷といいます。
> 
> 今度のプロジェクトでTeedaを使用することになり調査中です。
> 至らない所もあると思いますが、よろしくお願いします。
> 
> 早速質問ですが、
> Pageクラスのprerender()メソッドが呼び出される前に、
> 共通的な処理を入れたいのですが、うまく動作してくれません。
> 
> Teedaは1.0.7を使用しています。
> 
> 【auth.dicon】
> <components>
>     <component name="AuthorityInterceptor" class="example1.interceptor.AuthorityInterceptor" />
>     <component class="example1.web.hello.AddPage">
>         <aspect pointcut="prerender">
>                AuthorityInterceptor
>         </aspect>
>     </component>
> </components>
> 
> 【AuthorityInterceptor.java】
> public class AuthorityInterceptor implements MethodInterceptor {
> 
>  public Object invoke(MethodInvocation invocation) throws Throwable {
>    System.out.println("Authority Check!!");
>    Object ret = invocation.proceed();
>    return ret;
>  }
> }
> 
> auth.diconをインクルードする箇所がわからなかったので、
> app.diconにインクルードしました。
> 
> <components>
>   <include path="convention.dicon"/>
>   <include path="aop.dicon"/>
>   <include path="app_aop.dicon"/>
>   <include path="teedaExtension.dicon"/>
>   <include path="dxo.dicon"/>
>   <include path="auth.dicon"/>←←ココ
> </components>
> 
> 以上、初歩的な質問で申し訳ありませんがよろしくお願いします。
> 
> 
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user

───────────────────────────────
 株式会社 グランテック
 代表取締役社長
 加藤 潤一 Junichi Kato

〒154-0012
東京都世田谷区駒沢2-16-1 サンドー駒沢ビル4F
TEL 050-5538-2383  FAX 03-3487-7211
HP : http://www.grandtech.jp/
BLOG : http://d.hatena.ne.jp/j5ik2o/
E-MAIL : [E-MAIL ADDRESS DELETED]




Seasar-user メーリングリストの案内