新用户登录应用程序后,如何在JSF 2.0中创建新会话?
答案 0 :(得分:8)
你不需要。它使设计良好的webapps毫无意义。 servletcontainer已经完成了会话管理。只需将登录用户放在会话范围内即可。
@ManagedBean
@RequestScoped
public class LoginController {
private String username;
private String password;
@EJB
private UserService userService;
public String login() {
User user = userService.find(username, password);
FacesContext context = FacesContext.getCurrentInstance();
if (user == null) {
context.addMessage(null, new FacesMessage("Unknown login, try again"));
username = null;
password = null;
return null;
} else {
context.getExternalContext().getSessionMap().put("user", user);
return "userhome?faces-redirect=true";
}
}
public String logout() {
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return "index?faces-redirect=true";
}
// ...
}
登录用户将在同一会话的所有页面中以及#{user}
其他bean中以@ManagedProperty
的形式提供。
然而,在注销时,使会话无效更有意义。这将废弃所有会话范围的bean。您可以使用ExternalContext#invalidateSession()
。
public String logout() {
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return "index?faces-redirect=true";
}