Как очистить объект управляемого сеанса bean?

Я разрабатываю приложение, основанное на логинах, в JSF с файлами. В этом я сохранил зарегистрированную информацию о пользователе в управляемой сессией области управления, и мне нужно очистить эту информацию, когда он вышел из системы. Так, как очистить данные, которые находятся в объекте SessionScoped ManagedBean?

Ответ 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 тоже