[Seasar-user:15293] Re: CoolDeploy モードで@Componentアノテーションを使用した時の挙動

黒川博之 [E-MAIL ADDRESS DELETED]
2008年 8月 7日 (木) 07:56:47 JST


小林様

> Interceptor に Interceptor を適用しては
> いけません.(^^;
> 設定は actionCustomizer に記述してください.
今まで、Doltengやブランクプロジェクトで自動的に作成された
customizer.diconをいじった事が無かったので、意味不明に
なっていました・・・^^;;

> <component name="actionCustomizer" class="...">
>  <initMethod name="addAspectCustomizer">
>    <arg>"loginInterceptor"</arg>
>    <arg>true</arg>
>  </initMethod>
> </component>
上記記述を追加して、LoginInterceptorを以下のように変更しました。
*LoginActionかどうかの判断ロジックを追加



public class LoginInterceptor extends AbstractInterceptor {

    private static final long serialVersionUID = 1L;

    @Resource
    protected LoginForm loginForm;

    public Object invoke(MethodInvocation invocation) throws Throwable {

        System.out.println("ログインしているか検証します。");

        System.out.println(loginForm.userName);
        System.out.println(loginForm.passWord);

        if (super.getTargetClass(invocation) == LoginAction.class) {
            System.out.println("LoginActionなので、OKです。");
            return invocation.proceed();
        }

        if ((loginForm.userName != null) || (loginForm.passWord != null)) {
            System.out.println("OKです");
            return invocation.proceed();
        }

        System.out.println("NGです");

        //ログイン画面にリダイレクト
        return "/login?redirect=true";
    }
}


addIgnoreClassPatternで、LoginActionを追加しようともしましたが
そうすると、LoginAction自体に他のaspectも設定されなくなってしまう
ため、上記のように変更しました。

この方法が一番妥当でしょうか?
なお、これでHot/Warm/Cool全て同一の動きをしてくれました。

よろしくお願いします。


----- Original Message ----- 
From: "Koichi Kobayashi" <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Sent: Wednesday, August 06, 2008 4:45 PM
Subject: [Seasar-user:15287] Re: CoolDeploy モードで@Componentアノテーションを使用した時の挙動


> 小林 (koichik) です.
>
> Date:    Wed, 6 Aug 2008 16:27:14 +0900
> From:    黒川博之 <[E-MAIL ADDRESS DELETED]>
> To:      <[E-MAIL ADDRESS DELETED]>
> Subject: [Seasar-user:15286] Re: CoolDeploy モードで@Componentアノテーションを使用した時の挙動
>
>> 以下のように設定しましたが、loginInterceptorをアスペクトしているActionクラスの
>>
>> index()で、java.lang.StackOverflowErrorが発生してしまいました。
> (略)
>> ・customizer.dicon
>> <!--以下を追加-->
>> <component name="interceptorCustomizer"
>                   ^^^^^^^^^^^
> Interceptor に Interceptor を適用しては
> いけません.(^^;
> 設定は actionCustomizer に記述してください.
>
> なお,
>
> <component name="actionCustomizer" class="...">
>  <initMethod name="addAspectCustomizer">
>    <arg>"loginInterceptor"</arg>
>    <arg>true</arg>
>  </initMethod>
> </component>
>
> という記述でも同じ設定になります.
>
>
> -- 
> <component name="koichik">
>    <property name="fullName">"Koichi Kobayashi"</property>
>    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
>    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
> </component>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user 



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