Nella mia applicazione JSF, ottengo il nome dell'utente attualmente firmato a utente come questo ...Il logout JSF utilizzando session.invalidate non cancella il nome utente corrente?
public String getLoggedInUsername() {
return FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
}
... e verifico se l'utente ha eseguito l'accesso come questo ...
public boolean isSignedIn() {
return (getLoggedInUsername() != null);
}
... e quando l'utente segni fuori, faccio questo ...
public String doLogout() {
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession httpSession = (HttpSession)facesContext.getExternalContext().getSession(false);
httpSession.invalidate();
return "main";
}
il mio problema è dopo doLogout(), il getLoggedInUsername() restituisce ancora il nome dell'utente che è stato registrato. Che cosa dovrei fare per assicurarmi che getRemoteUser() restituisca null dopo il logout?
In alternativa, c'è un modo migliore per ottenere se isSignedIn() piuttosto che controllare il nome utente?
Grazie! Rob
Hai eseguito il debug dei metodi in questione o l'hai indovinato/concluso in base a come si comporta il browser web? La pagina potrebbe essere richiesta semplicemente dalla cache del browser ... – BalusC
Sì, l'ho debugato. Ho colpito il metodo doLogout(), dopo che è stato completato, ho colpito getLoggedInUsername() e restituisce il nome utente del ragazzo che ha effettuato l'accesso (anche dopo che è stata eseguita la session.invalidate). Qualche idea? –
Non so se sto inviando un reindirizzamento. :) Suppongo che sto usando qualunque sia il comportamento predefinito, su doLogOut() il browser lascia la pagina in cui mi trovavo e mostra la pagina main.jsf (che non è necessario accedere per vedere, a proposito). Questo aiuta? –