[Seasar-user:9242] Re: [Teeda]PageクラスへのAOP
shibuya kumiko
[E-MAIL ADDRESS DELETED]
2007年 7月 19日 (木) 12:17:47 JST
お世話になっております、渋谷です。
加藤 様、早速のご回答ありがとうございました。
報告が遅くなりましたが、無事にインターセプトできました!
customizer.diconに以下を追加したら、動くようになりました。
<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に追加すればいいのですか?
プロジェクトを作成するといくつかdiconファイルが作成されますが、
どう使用していいのかよくわかりません。
以上、よろしくお願いします。
> どうもです,加藤(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 メーリングリストの案内