0

誰かがログインしたときにactiveUserオブジェクトをセッションスコープに保存したいのですが、ユーザー固有の操作に使用していますが、管理者がデフォルトユーザーではないため、管理者がログインしようとすると問題が発生し、@out注釈がエラーエラーコードを引き起こしますおなじみです = @Out 属性には null 以外の値が必要です。authenticator.activeUser 私のロジック コードは次のとおりです。(注: 管理者と標準ユーザーは同じログイン パネルを使用します)

    @Out(scope = ScopeType.SESSION, required = true)
    private User activeUser;

public boolean authenticate() throws Exception {
    // SELECT OBJECT(user) FROM User user WHERE user.name = :name and
    // user.password = :pass

    try {
        // create a query for getting a user with specified parameters if no
        // user exist throw an exception
        setActiveUser((User) entityManager
                .createQuery(
                        "select u from User u where u.userName= :uname and u.password = :pass")
                .setParameter("uname", credentials.getUsername())
                .setParameter("pass", credentials.getPassword())
                .getSingleResult());

        identity.addRole("user");
        return true;

    } catch (Exception e) {
        // so there is no any normal user now looking for any admin entry
        System.out.println("there is no any member looking for admin");

        try {

            Admin admin = (Admin) entityManager
                    .createQuery(
                            "select a from Admin  a where a.username = :uname and a.pass = :p")
                    .setParameter("uname", credentials.getUsername())
                    .setParameter("p", credentials.getPassword())
                    .getSingleResult();

            identity.addRole("admin");
            System.err.println("found admin");
            return true;

        } catch (Exception e2) {
            System.err.println("admin bulunamadı");
            throw e2;

        }

    }
}

ユーザー固有のcrud操作では、ユーザーIDでそれらをログに記録しているため、in @out requiredはtrueである必要があります。どうすればこの問題を解決できますか。required=false の設定で十分ですか?

一方、ユーザーがentitymanager.resultlist()メソッドを見つけられない場合、例外がスローされます。メソッドが例外をスローしない限り、 @out 注釈が機能することを知っていますか?

4

0 に答える 0