[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 メーリングリストの案内