Wicketユーザ認証(2)

Wicket 認証ページ作成のつづき、

ログインページのクラスは、先日投稿した 
public class UranSession extends AuthenticatedWebSession で、signIn を実行する
ことで認証を行う。


public class LoginPage extends WebPage{
   public LoginPage(){
      // エラーメッセージ
      add(new FeedbackPanel("error"));
      // フォーム
      Form<Void> form = new Form<Void>("form");
      final TextField<String> username 
      = new TextField<String>("username",new Model<String>());
      form.add(username);
      final PasswordTextField password 
      = new PasswordTextField("password",new Model<String>());
      form.add(password);
      form.add(new Button("submit"){
         @Override
         public void onSubmit(){

            UranApplication application = (UranApplication)getApplication();
            UranSession session = (UranSession)getSession();

            String userName = username.getModelObject();
            String passwd = password.getModelObject();
            if (session.signIn(userName,passwd)){
               setResponsePage(application.getHomePage());
            }else{
               application.onUnauthorizedPage(LoginPage.this);
            }

         }
      });
      add(form);
   }
}

--------------------------------------------------------------------

ログイン後のページクラスで、コンストラクタの先頭で処理すべきことがある
セッションを参照してサインイン済みかを問い合わせて未の時にログインページに
遷移することだ。
先日のUranSession を使うと以下の処理をコンストラクタの最初に行う。

UranSession session = (UranSession)getSession();
if (!session.isSignedIn()) setResponsePage(LoginPage.class);

しかしこの記述をたくさんのページクラスコンストラクタに書くのもセンスが無い
ので、WebPage 継承クラスを用意してこれを必須で使うことにする。
(もちろん、ログイン、ログアウト、認証エラーのページクラスでは使用しない)

import org.apache.wicket.IPageMap;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.model.IModel;

/**
 * ログインしていない場合に、
 * LoginPage.class に遷移する setResponsePage を実行
 */
public class BaseWebPage extends WebPage{
   public BaseWebPage(){
      super();
      AustinSession session = (AustinSession)getSession();
      if (!session.isSignedIn()) setResponsePage(LoginPage.class);

   }
   public BaseWebPage(IModel model){

      super(model);
      AustinSession session = (AustinSession)getSession();
      if (!session.isSignedIn()) setResponsePage(LoginPage.class);

   }
   public BaseWebPage(IPageMap pageMap,IModel model){

      super(pageMap,model);
      AustinSession session = (AustinSession)getSession();
      if (!session.isSignedIn()) setResponsePage(LoginPage.class);

   }
}