JSF déconnexion à l'aide de session.invalider ne pas effacer le nom d'utilisateur?
Dans mon JSF application, j'obtiens le nom de la signé à l'utilisateur comme ceci ...
public String getLoggedInUsername() {
return FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
}
... et je vérifie si l'utilisateur est connecté comme ça ...
public boolean isSignedIn() {
return (getLoggedInUsername() != null);
}
... et lorsque l'utilisateur se connecte, je fais ce ...
public String doLogout() {
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession httpSession = (HttpSession)facesContext.getExternalContext().getSession(false);
httpSession.invalidate();
return "main";
}
Mon problème, c'est après doLogout(), le getLoggedInUsername() renvoie toujours le nom de l'utilisateur qui est connecté. Que suis-je censé faire pour s'assurer que getRemoteUser() renvoie la valeur null après déconnexion?
En alternance, est-il une meilleure façon d'obtenir si isSignedIn() que la simple vérification du nom d'utilisateur?
Merci!
Rob
Avez-vous déboguer les méthodes de lui-même, ou avez-vous deviné/conclure vous-même basé sur la façon dont le navigateur se comporte? La page peut être une simple demande à partir du cache du navigateur...
Oui, j'ai débogué. J'ai frappé à la doLogout() la méthode, après c'est terminé, j'ai frappé à la getLoggedInUsername() et retourne le nom de l'utilisateur est le gars qui a été connecté (même après la séance.invalider a été exécuté). Des idées?
Je ne sais pas si je t'envoie une redirection. 🙂 Je suppose que je suis en utilisant quel que soit le comportement par défaut est, sur doLogOut() le navigateur feuilles quelle que soit la page que j'ai été sur et montre les principales.jsf page (que vous n'avez pas à être connecté à voir, par la voie). Est-ce que c'est?
Oui, j'ai déjà deviné. J'ai supprimé le commentaire et l'a transféré à une réponse avant de commenté. C'est une redirection lors de l'URL dans la barre d'adresse du navigateur changements à l'URL cible au lieu de coller de l'URL à laquelle le formulaire est soumis.
Oui, j'ai débogué. J'ai frappé à la doLogout() la méthode, après c'est terminé, j'ai frappé à la getLoggedInUsername() et retourne le nom de l'utilisateur est le gars qui a été connecté (même après la séance.invalider a été exécuté). Des idées?
Je ne sais pas si je t'envoie une redirection. 🙂 Je suppose que je suis en utilisant quel que soit le comportement par défaut est, sur doLogOut() le navigateur feuilles quelle que soit la page que j'ai été sur et montre les principales.jsf page (que vous n'avez pas à être connecté à voir, par la voie). Est-ce que c'est?
Oui, j'ai déjà deviné. J'ai supprimé le commentaire et l'a transféré à une réponse avant de commenté. C'est une redirection lors de l'URL dans la barre d'adresse du navigateur changements à l'URL cible au lieu de coller de l'URL à laquelle le formulaire est soumis.
OriginalL'auteur Robert Hume | 2011-02-04
Vous devez vous connecter pour publier un commentaire.
De s'assurer que vous êtes à la réorientation de la demande après l'invalidation de la session. L'utilisateur principal est résolu basé sur un attribut de session. Ainsi, lorsque vous, juste en avant de la page cible (un de navigation JSF cas par défaut), puis il va être encore là, dans la page cible, car il utilise le même
HttpSession
de référence. Une redirection indique le webbrowser pour déclencher une nouvelle marque de la requête HTTP, par la présente, de forcer le serveur à recréer leHttpSession
de référence basé sur la nouvelle demande.Ajouter
<redirect/>
à la navigation, afin de forcer JSF pour envoyer une redirection. Ou lorsque vous êtes déjà en JSF 2.0, ajouter?faces-redirect=true
à la valeur des résultats.OriginalL'auteur BalusC
Après l'appel de session".invalidate();" , ajouter "demande.logout();".
Méthode invalidate sur l'objet de session juste nettoyer les données de session.
Méthode de déconnexion sur demande objet d'établir la valeur null comme valeur retournée quand getUserPrincipal, getRemoteUser, et getAuthType est appelée sur la demande.
OriginalL'auteur Igor