初監督作品

同じ事を何度も調べないようにメモ代わり。そしてもの書きの練習に。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Seasar2[Teeda]でログイン認証&Interceptor&SessionにDtoを保存

Teeda-extension 1.0.12とS2Container 2.4.22でWebアプリを鋭意開発中

LoginPageでログイン成功後、ユーザー情報のDtoをSessionに格納、
各ページ読み込み前にinterceptorを使ってDtoの中身を確認、nullならLoginPageへ飛ばす、
というWebアプリなら当たり前なことをやりたかったのだけども。。

1日はまってしまった。
まだSeasarの仕組みを理解してないせいもあるし、親切なマニュアルがないのも非常に困った。
結局Seasarのメーリングリンスと過去ログを懸命にたどりながらやっとできました。


[Sessionに保存するDto]


@Component(instance = InstanceType.SESSION)
public class SessionDataDto implements Serializable {
    private static final long serialVersionUID = 1L;
	
	   public String userId;

    }  



[LoginPage.java]


public Class doLogin() {

//この前で入力されたユーザーIDとパスワードのDB問い合わせと認証やってます
SessionDataDto sessionDataDto = (SessionDataDto)SingletonS2ContainerFactory.getContainer().getComponent(SessionDataDto.class);

sessionDataDto.setUserId(userId);

}



[インターセプタ]


public class LoginConfirmInterceptor extends AbstractInterceptor {
	
	private static final long serialVersionUID = -534757779194131741L;
	
	public Object invoke(MethodInvocation invocation) throws Throwable {
		
		SessionDataDto sessionDataDto = (SessionDataDto)SingletonS2ContainerFactory.getContainer().getComponent(SessionDataDto.class);
		//ユーザー情報(Session)を保持していない場合
		//強制的にLoginPageへ遷移させる。
		if(sessionDataDto.getUserId() == null){
			
			logger.info(">>>>>>No login. Go to LoginPage");
			return LoginPage.class;
		}
			return invocation.proceed();
		}
	
}


[Interceptorを適用しているページクラス]


@Binding(bindingType = BindingType.MUST)
	protected SessionDataDto sessionDataDto;
	
	
	public Class initialize() {
		
		if(sessionDataDto == null){
			return LoginPage.class;
		}


customizer.diconファイルへの追記もお忘れなく!


  
      
        
          
            "loginConfirmInterceptor"
          
          "do.*, initialize, prerender"
        
      
    
//以下は、LoginPageはインターセプタ対象外にするってことです
    
      "<ルートパッケージ>.web"
      "LoginPage"
    


Internet Explorer9, FireFox17.0, Chromeで動作確認済みです(Windows7, Tomcat6)


あ、@Binding使う際はDtoの変数名をルールに従って書かないとDIされないでヌルポでるので注意です
最初SessionDataDto dto;とかやってたらヌルポでまくりで、、
くわしくはこちら

スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2012/11/29(木) 17:45:16|
  2. Java
  3. | トラックバック:0
  4. | コメント:0

プロフィール

fumsa

Author:fumsa
プログラマー3年目です。
C, Java, PHP, JavaScript, Linuxなど主に

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

未分類 (0)
CSS (1)
Linux (3)
JavaScript (3)
Java (1)

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。