我希望在有人登录时将activeUser对象存储在会话scobe中,我正在将其用于特定于用户的操作但是当管理员尝试登录时会出现问题,因为admin不是默认用户因此@out注释会导致错误 错误代码很熟悉= @Out属性需要非空值:authenticator.activeUser 我的逻辑代码如下; (注意:admin和standart用户使用相同的登录面板)
@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;
}
}
}
@out中的必须为true,因为在用户特定的crud操作中,我使用用户ID记录它们。 我怎么解决这个问题。设置required = false就够了吗?
另一方面,如果没有用户发现entitymanager.resultlist()
方法抛出异常。所以我知道@out annotataions可以工作,除非方法抛出任何异常吗?