[Seasar-user:8092] S2ContainerとTeedaのバージョンを変更するとInterceptorにDIされません

亀田一郎 [E-MAIL ADDRESS DELETED]
2007年 6月 6日 (水) 07:27:54 JST


亀田と申します。
初めて投稿します。
宜しくお願いします。

AOPによる認証チェックのサンプルを作っています。
S2ContainerとTeedaのバージョンを変更したら、
プログラムが正常に動作しなくなり、原因が分かりません。
皆様のご教示を賜りたく投稿しました。

■環境1(S2Container-2.4.10とTeeda-1.0.4)
  s2-extension-2.4.10.jar,s2-framework-2.4.10.jar,s2-tiger-2.4.10.jar
  teeda-core-1.0.4.jar,teeda-extension-1.0.4.jar,teeda-tiger-1.0.4.jar
  他多数

■環境2(S2Container-2.4.13とTeeda-1.0.7)
s2-extension-2.4.13.jar,s2-framework-2.4.13.jar,s2-tiger-2.4.13.jar
teeda-ajax-1.0.7.jar,teeda-core-1.0.7.jar,teeda-extension-1.0.7.jar,
teeda-tiger-1.0.7.jar
  他多数

■プログラム構成
  LoginInterceptor2.java
  LoginUserDto.java    @Component(instance = InstanceType.SESSION)で
セッションに保管
login2.html     ---->Login2Page.java
                       ログオフは@RemoveSession(name="loginUserDto")
  logincheck2.html---->Logincheck2Page.java

■テストの概要
・login2.htmlで入力したログイン情報をLogin2Pageでチェックし
結果をLoginUserDtoにセットし、セッションに保管します。
  ・logincheck2.htmlはテスト用htmlで、画面上のsubmitボタンを
押下するとLogincheck2PageのdoAuth()メソッドを呼び出します。
・doAuth()メソッドにはAOPが適用されており、LoginInterceptor2が
LoginUserDtoのログイン情報をチェックし、認証OKとエラーに
対応して画面に遷移します。

■環境1は正常に動作します。

■環境2の場合、
  1.LoginInterceptor2にLoginUserDtoがDIされない(null)ため、常に認証エラーになります
Logincheck2PageにはDIされます
  2.Login2PageのログオフでLoginUserDtoがセッションから削除されません
    @RemoveSession(name="loginUserDto")が利かない

■ソース

【LoginInterceptor2】
package test.interceptor;

… 省略 …

public class LoginInterceptor2 implements MethodInterceptor {

  private LoginUserDto loginUserDto;

  public void setLoginUserDto(LoginUserDto loginUserDto){
this.loginUserDto= loginUserDto; }

  public Object invoke(MethodInvocation invocation) throws Throwable {

    if(loginUserDto!=null){
      if(loginUserDto.isAuthed()){
          System.out.println("@@@@@@@@@ 前");
          Object obj = invocation.proceed();
          System.out.println("@@@@@@@@@ 後");
          return obj;
      }
    }
    return "error";
  }
}

【LoginUserDto】
package test.web.dto;
import org.seasar.framework.container.annotation.tiger.*;

@Component(instance = InstanceType.SESSION)
public class LoginUserDto {
  private String userId;
  private boolean authed;
  public String  getUserId()                 { return userId;          }
  public void    setUserId(String userId)    { this.userId = userId;   }
  public boolean isAuthed()                  { return authed;          }
  public void    setAuthed(boolean authed)   { this.authed = authed;   }
}

【Login2Page】

package test.web.login2;

… 省略 …

public class Login2Page {

  private String  userId;
  private String  password;
  private boolean loggedin=true;
  private String  loginMsg = "初期メッセージ";

  private LoginUserDto loginUserDto;

 … 省略 …(setter/getter)

  public void    setLoginUserDto(LoginUserDto loginUserDto) {
    this.loginUserDto = loginUserDto;
  }

  public String doLogin() {
    System.out.println("#### start doLogin() ####");
    if(userId.equals("user") && password.equals("user")) {
      loginUserDto.setAuthed(true);
      loginUserDto.setUserId(userId);
      loginMsg = "ログイン成功";
      loggedin = true;
      return "success";
    } else {
      loginUserDto.setAuthed(false);
      loginMsg = "ログイン失敗";
      loggedin = false;
      return "error";
    }

  }

  @RemoveSession(name="loginUserDto")
  public String doLogout() {
    System.out.println("#### start doLogout() ####");
    return null;
  }

  public String prerender() {
    System.out.println("#### start prerender() ####");

    if(loginUserDto.isAuthed()) {
      loggedin = true;
    } else {
      loggedin = false;
    }
    return null;
  }
}

【Logincheck2Page】

package test.web.logincheck2;

… 省略 …

public class Logincheck2Page {

… 省略 …

  private LoginUserDto loginUserDto;
  public void setLoginUserDto(LoginUserDto loginUserDto){
    his.loginUserDto = loginUserDto ;
  }

  public String initialize(){
    System.out.println("##### Start initialize() #####");
    statMsg="ログイン承認未済";
    if(loginUserDto!=null){
      if(loginUserDto!=null){
        if(loginUserDto.isAuthed()){
          statMsg="ログイン承認済み";
        }
      }
    }
    return null;
  }
  public String doAuth() {
    System.out.println("##### Start doAuth() #####");
    return null;
  }
}
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/seasar-user/attachments/20070606/283d56c3/attachment.html 


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