CDI を使用して Bean に注釈を付けます。SessionManager と呼ばれる 1 つの Bean は、次の宣言を使用してログインしたユーザー情報を保持します。
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import javax.ejb.Stateful;
@Stateful
@Named
@SessionScoped
public class SessionManagerImpl implements SessionManager, Serializable {
...
public UserDto getLoginedUser() {
...
}
}
もう 1 つは、次のように DashboardController と呼ばれます。
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import javax.inject.Inject;
@Named
@RequestScoped
public class DashboardController implements Serializable {
@Inject
private SessionManager sessionManager;
...
public void loadUserInfo() {
...
UserDto userDto = sessionManager.getLoginedUser();
}
}
初めてページを開いたときに DashboardController を参照すると、うまく機能します。そして、私がウェブサイトを使い続ければ、それはまだ機能します. しかし、何分間もページをクリックせずに戻ってページを開くと、javassist$$getLoginedUser メソッド呼び出しの null ポインターが表示されます (デバッグを使用して監視すると、sessionManager は null ではありません)。セッションは引き続き有効です。面のコンテキストを使用して、セッション マップから直接値を取得できます。
SessionManager の何が問題になっていますか? ありがとう。