2012-04-09 10 views
3

ich bin mit Feder 3 (Anmerkungen) mit JSF, und ich weiß, wie man eine Sitzung erstellen und wie es danach zu entkräften ...Wie erstelle ich im Frühjahr eine neue Sitzung?

so, wenn ich anmelden und die Logout-Button am Ende verwenden, dann Everthing Werke groß. aber das Problem ist, die Sitzung bleibt, wenn ich nicht auf die Schaltfläche Abmelden klicken. Wenn ich mich jetzt mit einem anderen Benutzer anmelde, bleiben die alten Sitzungsdaten erhalten, weil die alte Sitzung nicht ungültig gemacht wurde.

Wie kann ich das System zwingen, eine neue Sitzung zu erstellen, wenn die alte Sitzung nicht ungültig gemacht wurde?

Antwort

6

Sie sollten die Sitzung löschen, wenn sich der Benutzer anmeldet auf diese Weise, ob sie schon abgemeldet oder nicht, Sie beginnen frisch.

@RequestMapping("login") 
public String login(LoginForm form, HttpServletRequest request, HttpSession session) { 

    session.invalidate(); 
    HttpSession newSession = request.getSession(); // create session 

    // log the user in 

    return "successPage"; 
}  
+0

Dank für Ihre Antwort, war es sehr hilfreich! – picobas

4

Steves Antwort ist gut. Um nur ein wenig mehr Kontext hinzuzufügen, sollten Sie immer ungültig machen und eine neue Sitzung nach einem Benutzerauthentifizierungsereignis als eine bewährte Methode gegen Sitzungsfixierungsangriffe erstellen.

Eine andere Möglichkeit zu erreichen, was Sie tun möchten, ist Spring Security zu verwenden. Ich bin mir nicht sicher, ob Sie es in Betracht gezogen haben, aber standardmäßig behandelt es das Invalidieren und Generieren neuer Sitzungen bei jeder Benutzeranmeldung für Sie. Es hat auch andere Funktionen, die Sie möglicherweise nicht nützlich finden. Dieser Link kann hilfreich sein: http://static.springsource.org/spring-security/site/docs/3.1.x/reference/ns-config.html. Blättern Sie in Abschnitt „3.3.3/Session-Fixation-Angriff Protection“ für relavent Infos auf die Frage

+0

Sie haben Recht, sieht aus wie Frühling Sicherheit ist genau das, was ich suchte. Vielen Dank! – picobas

+1

+1 für das Vorschlagen von Spring Security –

0

Um neue Sitzung nach dem Abmelden Check session.isNew() Zustand zu erstellen, wenn Sitzung alt ist dann invalidate() nennen. Logout-Methode umleiten auf /Login Mapping. Es überprüft Sitzung und es wird neue Sitzung erstellt, wenn Sieinvalidate() Methode aufrufen.

Logout-Code:

@RequestMapping("/logout") 
public String logout() { 
    return "redirect:/login"; 
} 

Login-Code:

@RequestMapping(value = "/login") 
public String login(HttpServletRequest request, HttpSession session) { 
    /* 
    * create new session if session is not new 
    */ 
    if (!session.isNew()) { 
     session.invalidate(); 
    } 
    return "login"; 
} 
Verwandte Themen