誰かがログインしたときに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 注釈が機能することを知っていますか?