wake-up-neo.com

Wie macht man eine Sitzung in JSF 2.0 ungültig?

Wie kann eine Sitzung in einer JSF 2.0-Anwendung am besten ungültig gemacht werden? Ich weiß, dass JSF selbst keine Sitzung abwickelt. Soweit konnte ich finden

private void reset() {
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
            .getExternalContext().getSession(false);
    session.invalidate();
}
  1. Ist diese Methode korrekt? Gibt es eine Möglichkeit, ohne die ServletAPI zu berühren?
  2. Stellen Sie sich ein Szenario vor, in dem ein @SessionScoped UserBean die An- und Abmeldung eines Benutzers übernimmt. Ich habe diese Methode in der gleichen Bohne. Was passiert nun mit meiner Bean mit Sitzungsbereich, wenn ich die reset() -Methode aufrufe, nachdem ich mit den erforderlichen DB-Aktualisierungen fertig bin? da auch die bean selbst in HttpSession gespeichert ist?
58
Nikhil

Ist diese Methode richtig? Gibt es eine Möglichkeit, ohne die ServletAPI zu berühren?

Mit ExternalContext#invalidateSession() können Sie die Sitzung ungültig machen, ohne die Servlet-API abrufen zu müssen.

@ManagedBean
@SessionScoped
public class UserManager {

    private User current;

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

    // ...

}

Was passiert mit meiner Bean mit Sitzungsbereich? da auch die bean selbst in httpsession gespeichert ist?

Sie ist in der aktuellen Antwort weiterhin verfügbar, wird jedoch bei der nächsten Anforderung nicht mehr vorhanden sein. Daher ist es wichtig, dass nach dem Ungültigmachen eine Umleitung (eine neue Anfrage) ausgelöst wird, da sonst immer noch Daten aus der alten Sitzung angezeigt werden. Eine Umleitung kann wie im obigen Beispiel durch Hinzufügen von faces-redirect=true Zum Ergebnis erfolgen. Eine andere Möglichkeit zum Senden einer Umleitung ist die Verwendung von ExternalContext#redirect() .

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

Die Verwendung ist in diesem Zusammenhang jedoch fraglich, da die Verwendung eines Navigationsergebnisses einfacher ist.

124
BalusC
public void logout() {
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
}
13
Stani