2013-02-21 15 views
10

Sto sviluppando un'applicazione basata su login in JSF con primefaces. In questo ho mantenuto le informazioni utente registrate nella sessione scopebean gestita e ho bisogno di cancellare i dettagli quando ha effettuato il logout, quindi Come cancellare quei dettagli che si trovano nell'oggetto ManagedBean SessionScoped?Come cancellare un oggetto del bean gestito con scope della sessione?

risposta

16

È necessario invalidare la sessione corrente chiamando la seguente funzione nel vostro metodo di azione:

FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); 

Inoltre, come la sessione ambito fagioli sono cestinati seppellendo la successiva richiesta, essere assicurarsi di inviare un redirect:

FacesContext.getCurrentInstance().getExternalContext().redirect("/login.xhtml"); 

Oppure, semplicemente restituire un risultato caso di navigazione dal tuo metodo:

Nel caso in cui non si desideri invalidare la sessione e, in effetti, mantenere i bean con scope di sessione (che è una cattiva pratica secondo me), basta annullare tutti i dati dell'utente (che si sperava raccolti in un bean gestito con scope di sessione) nel metodo di logout (potrebbe essere necessario iniettare quel bean nel caso in cui il metodo di logout risieda in un altro bean con scope di sessione).

-2

Quando la disconnessione dell'utente, la sessione viene distrutta e tutte le SessionScoped ManagedBean oggetti troppo

+2

Una sessione di "disconnessione" non è per definizione "distrutta". Tuttavia, il contrario è di solito in effetti lo è. – BalusC

+0

Non sono d'accordo. Logout significa solitamente "invalidazione della sessione". È la migliore pratica ed è lo schema comune. Non distruggere la sessione crea problemi di sicurezza –

+1

Uh, certo. Se così fosse, l'OP non avrebbe posto questa domanda al primo posto :) – BalusC

3

Non è necessario cancellare con scope di sessione bean gestito manualmente. Basta cancellare la sessione utente. Utilizzando il seguente codice nel servlet per il logout.

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(); 
    } 
} 

Se si cancellano ancora manualmente i dati del bean gestito, è possibile farlo utilizzando il seguente codice.

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("managed_bean_name", null); 

Dove "mananged_bean_name" è il nome del bean gestito.

Speranza che aiuta

Problemi correlati