我有一个JSF应用程序中,用户可以通过loginBean登录如下:用户似乎并没有被清除
public String doLogin() {
Query query = ejbFacade.getEntityManager().createNamedQuery("loginQuery", User.class);
query.setParameter("email", username);
query.setParameter("pw", pw);
try {
FacesContext context = FacesContext.getCurrentInstance();
context.getExternalContext().getSessionMap().put("user", query.getSingleResult());
return "/loggedin/index?faces-redirect=true";
} catch (NoResultException userNotFoundEx) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Unknown login, try again"));
return "/public/login";
}
}
然后,我有一个产生一个userRegistrationBean @已登录用户。这个bean是SessionScoped所以当一个registrates一个已经登录 要知道,如果用户从“直接登录”或“注册登录”来到我执行以下操作:
@Produces @Logado
public User getLoggedUser() {
if (this.user.getId() == null) { //means no user was registered this time
this.loggedUser = FacesContext.getCurrentInstance().context.getExternalContext().getSessionMap().get("user");
if (this.loggedUser != null) {
return this.loggedUser;
}
throw new IllegalStateException("There's no user logged in.");
}
this.loggedUser = this.user;
return this.loggedUser;
}
我注销方法:
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return "/index.xhtml?faces-redirect=true";
问题是,当我直接进入数据库并进行更改时,让我们说一些用户名,然后用该登录名进入系统,名称不是最新的。 假设我的数据库是空的。然后我注册一个用户 - >注销 - >手动更改数据库中的某些东西 - >登录该用户。用户数据未更新。 似乎应用程序不会再次从数据库中读取数据,但日食链接会在每次登录时显示 新查询。 请问有人能赐教吗?