JavaEEによるログイン機能の実現のために、session scopedなクラス(LoginSession)にログイン中のユーザーIDをsetする方法を考えています。
ログインページ内でloginが成功した場合(login()メソッド)、
- セッションIDを更新する
- LoginSessionオブジェクトにuserIdを持たせる
- トップページへリダイレクションする
- トップページでLoginSessionオブジェクトのuserIdを参照する
という流れを考えています。
現在の問題は、userIdがトップページで参照できない点についてです。
A. sessionUpdate()を持つクラス
sessionUpdate()の中身は以下のコードの通りですが、このメソッドをLoginBeanクラスが持つか、LoginSessionクラスが持つかで挙動が変わります。前者はuserIdが参照できる。後者は参照できない。
B. リダイレクションするか
login()の最後に以下のコードではリダイレクションを実施していますが、実施するとuserIdが参照できません。フォワード形式では参照できます。
Aに関してはメソッドの内容が全く同じにもかかわらず、挙動が違う点が分かりません。
ご教示いただけませんでしょうか。
// 以下、参考コード
public class LoginBean {
@Inject LoginSession loginSession; @NotNull private String userId; private String password; public String login(){ if(userId.equals("user")){ loginSession.sessionUpdate(); // または // sessionUpdate(); loginSession.setUserId(userId); return "top?faces-redirect=true"; } return null; } public void sessionUpdate() { FacesContext facesContext = FacesContext.getCurrentInstance(); facesContext.getExternalContext().invalidateSession(); facesContext.getExternalContext().getSession(true); }
// 以下、getter setter
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。