Я разрабатываю приложение, основанное на логинах, в JSF с файлами. В этом я сохранил зарегистрированную информацию о пользователе в управляемой сессией области управления, и мне нужно очистить эту информацию, когда он вышел из системы. Так, как очистить данные, которые находятся в объекте SessionScoped ManagedBean?
Как очистить объект управляемого сеанса bean?
Ответ 1
Вам нужно сделать недействительным текущий сеанс, вызвав следующую функцию в вашем методе действий:
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
Кроме того, по мере того, как сеанс с ограниченной видимостью beans выгружается с последующим запросом, обязательно отправляйте перенаправление:
FacesContext.getCurrentInstance().getExternalContext().redirect("/login.xhtml");
Или просто верните результат действия навигации из вашего метода:
return "login.xhtml?faces-redirect=true";
Если вы не хотите аннулировать сеанс и, фактически, сохраняете свой сеанс beans (который, по моему мнению, является плохой практикой), просто аннулируйте все пользовательские данные (которые, мы надеемся, были собраны в одном управляемый сеансом bean) в методе выхода из системы (вам может потребоваться ввести этот bean в том случае, если метод выхода находится в другом сеансе, ограниченном сеансом bean).
Ответ 2
Вам не нужно вручную очищать управляемый сеанс bean. Просто очистите сеанс пользователя. Используя следующий код в сервлет для выхода из системы.
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
System_Properties system_Properties=new System_Properties();
PrintWriter out = response.getWriter();
try {
request.getSession().invalidate();
}finally {
out.close();
}
}
Если вы все еще вручную очистите управляемые данные bean, тогда это можно сделать, используя следующий код.
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("managed_bean_name", null);
Где "mananged_bean_name" - это имя вашего управляемого bean.
Надеюсь, что это поможет
Ответ 3
Когда пользователь выходит из системы, сеанс уничтожается и все объекты SessionScoped ManagedBean тоже