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
È 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).
Quando la disconnessione dell'utente, la sessione viene distrutta e tutte le SessionScoped ManagedBean oggetti troppo
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
- 1. bean gestito con scope sessione vs bean stateful vs httpsession
- 2. Bean gestito con scope della sessione e actionListener
- 3. Utilizzo del bean gestito con scope sessione jsf per rappresentare i dati statici gerarchici
- 4. JSF - Il bean gestito con ambito sessione non ha re-iniettate dipendenze nella deserializzazione della sessione
- 5. Come terminare un thread in un bean con scope vista?
- 6. Spring ApplicationContext Bean Scope
- 7. Come ottenere tutti i bean con scope di sessione in JSF 2?
- 8. JSF-bean gestito EJB iniezione
- 9. Ottieni dati Bean con rilevamento sessione in un altro ManagedBean
- 10. Come ottenere il nome del bean gestito dall'interno del bean di supporto?
- 11. Come configurare un bean gestito all'avvio?
- 12. Come sovrascrivere un bean con scope per i test?
- 13. Accesso ai valori di un bean gestito JSF in un altro bean gestito
- 14. Aggiorna/Ricarica bean gestito dell'ambito applicazione
- 15. Quando utilizzare il bean di sessione con stato sul bean di sessione stateless?
- 16. Esempio xtext di un oggetto con scope
- 17. JSF 2 localizzazione (bean gestito)
- 18. Eventi CDI osservati attraverso bean di supporto JSF con scope di sessione
- 19. Il bean con scope sessione CDI non distrutto provoca perdite di memoria
- 20. Come dichiarare un bean gestito JSF in un'applicazione Spring 3.1?
- 21. Chiamata metodo bean gestito da JavaScript
- 22. py.test: cartella temporanea per lo scope della sessione
- 23. Come configurare un bean gestito per lavorare con il documento Notes
- 24. Quando viene distrutto un bean CDI con scope @Dependent, se si ottiene quel bean tramite Provider.get()?
- 25. come cancellare la sessione di sviluppo sulla chiusura del browser?
- 26. Inject Bean Session Singleton in un bean di sessione stateless
- 27. Autowiring richiesta di scope con scope nei bean con ambito applicativo
- 28. Cancellare una sessione in ASP.NET
- 29. Recupera un bean gestito da un contenitore JerseyTest con jersey-spring3
- 30. Sessione PHP con un oggetto incompleto
Una sessione di "disconnessione" non è per definizione "distrutta". Tuttavia, il contrario è di solito in effetti lo è. – BalusC
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 –
Uh, certo. Se così fosse, l'OP non avrebbe posto questa domanda al primo posto :) – BalusC