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

Junichi Kato [E-MAIL ADDRESS DELETED]
2007年 7月 19日 (木) 13:21:39 JST


渋谷さん,
加藤です.

> <component name="pageCustomizer"
> class="org.seasar.framework.container.customizer.CustomizerChain">
> (略)
>  <initMethod name="addCustomizer">
>   <arg>authorityCustomizer</arg>
>  </initMethod>    
> </component>
> 
> <component name="authorityCustomizer"
> class="org.seasar.framework.container.customizer.AspectCustomizer">
>  <property name="useLookupAdapter">true</property>
>  <property name="pointcut">"prerender"</property>
>  <property name="interceptorName">"authorityInterceptor"</property>
>   <initMethod name="addClassPattern">
>    <arg>"example1.web"</arg>
>    <arg>".*Page"</arg>
>   </initMethod>
> </component>
> 
> 
> ところで、気になった点を一つ。
> 独自のInterceptorの追加はcustomizer.diconに追加すればいいのですか?

AOPをかける方式としは3つあると思います.
説明が足りない部分や間違いがあれば,どなたかツッコミお願いしますm(_ _)m

1)diconファイルでAspectを適用する
2)ComponentAutoRegisterや,SMART deployでコンポーネントを自動登録してい
るなら,Aspectアノテーションで適用する.定数アノテーションや,Tiggerアノ
テーションが使えます.
3)SMART deployでは,Customizerを使ったAspectの適用も可能.

独自のInterceptorにリクエストやセッションで管理されるコンポーネント
(CurrentUserDtoなど)をDIするような場合は,3)でuseLookupAdapterがtrueにな
るように登録しています.
http://d.hatena.ne.jp/j5ik2o/20070416/1176690596#c

そのようなコンポーネントをDIする必要がなければ1)2)3)のどれでも好きな方法
でいいと思いますが,楽なのは2)かと思います.

> プロジェクトを作成するといくつかdiconファイルが作成されますが、
> どう使用していいのかよくわかりません。

この辺をみてもらうとよいかもしれません.
http://s2container.seasar.org/2.4/ja/stdDicon.html
http://s2container.seasar.org/2.4/ja/stdDicon.html#userDefined


> 
> 以上、よろしくお願いします。
> 
> 
> > どうもです,加藤(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 mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-user
> > 
> 
> 
> _______________________________________________
> 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 メーリングリストの案内