Вам не нужно.Это делает в хорошо разработанных веб-приложениях никакого смысла.Сервлет-контейнер уже управляет сессией.Просто поместите зарегистрированного пользователя в область сеанса.
@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}
на всех страницах в течение того же сеанса, а также в @ManagedProperty
других bean-компонентов.
Однако при выходе из системы имеет больше смысла аннулировать сеанс.Это также уничтожит все bean-объекты сессионной области.Для этого вы можете использовать ExternalContext#invalidateSession()
.
public String logout() {
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return "index?faces-redirect=true";
}
См. Также: