63 votes

Comment invalider une session dans JSF 2.0?

Quelle est la meilleure façon possible afin d'invalider la session dans un JSF 2.0 de l'application? Je sais JSF lui-même ne gère pas la session. Jusqu'à présent j'ai pu trouver

private void reset() {
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
            .getExternalContext().getSession(false);
    session.invalidate();
}

1) tout d'Abord, cette méthode est-elle correcte? Est-il un moyen, sans toucher le ServletAPI?

2) d'autre part, d'envisager un scénario dans lequel un @SessionScoped UserBean gère la connexion-déconnexion d'un utilisateur. J'ai cette méthode dans le même bean. Maintenant quand j'appelle l' reset() méthode après j'en ai fini avec les bd mises à jour, ce qui va arriver à mon cours de la session d'étendue de haricot? puisque même le bean lui-même est stocké dans HttpSession?

125voto

BalusC Points 498232

Tout d'abord, cette méthode est-elle correcte? Est-il un moyen, sans toucher le ServletAPI?

Vous pouvez utiliser ExternalContext#invalidateSession() d'invalider la session sans avoir besoin de saisir de la Servlet API.

@ManagedBean
@SessionScoped
public class UserManager {

    private User current;

    public String logout() {
        FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
        return "/home.xhtml?faces-redirect=true";
    }

    // ...

}

ce qui va arriver à mon cours de la session d'étendue de haricot? puisque même le bean lui-même est stocké dans HttpSession?

Il sera accessible dans le courant de la réponse, mais il ne sera plus là dans la prochaine demande. Ainsi, il est important qu'une redirection (nouvelle demande) est déclenché après l'invalider, sinon, vous êtes toujours d'afficher les données de l'ancienne session. Une redirection peut être fait en ajoutant faces-redirect=true pour le résultat, comme je l'ai fait dans l'exemple ci-dessus. Un autre moyen d'envoyer une redirection est à l'aide de ExternalContext#redirect().

public void logout() throws IOException {
    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    ec.invalidateSession();
    ec.redirect(ec.getRequestContextPath() + "/home.xhtml");
}

Son utilisation est cependant discutable dans ce contexte que l'utilisation d'une navigation résultat est plus simple.

13voto

Stani Points 71
public void logout() {
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X