[Seasar-user:8094] Re: S2ContainerとTeedaのバージョンを変更するとInterceptorにDIされません
Shinpei Ohtani
[E-MAIL ADDRESS DELETED]
2007年 6月 6日 (水) 10:08:55 JST
大谷です。
はずしているかもしれませんが、
・LoginInterceptor2 は本当に動いていますでしょうか?
デバッグポイントをあててみてください。
・customizer.diconが何かおかしいかもしれません。
こちらは見せていただければ何かわかるかもしれません。
・環境2でTeedaやS2の古いjarがWEB-INFの下に残っていたりしませんか?
07/06/06 に 亀田一郎<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 亀田と申します。
> 初めて投稿します。
> 宜しくお願いします。
>
> 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;
> }
> }
>
>
>
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
>
--
=============================
Shinpei Ohtani
[E-MAIL ADDRESS DELETED]
=============================
Seasar-user メーリングリストの案内