8 Stimmen

Wie setzt man JSESSIONID zurück?

Es gilt als gute Sicherheitspraxis, das Sitzungscookie zurückzusetzen, wenn sich ein Benutzer authentifiziert.

Wie macht man das mit Java?

Mein bisheriger Versuch ist erfolgreich, aber ich frage mich, ob es einen besseren Weg gibt:

public static HttpSession resetSessionId(HttpSession session, 
      HttpServletRequest request) {
    session.invalidate();
    session = request.getSession(true);
    return session;
}

4voto

cherouvim Punkte 31201

Ich übergebe nur die Anfrage, von der ich die Sitzung erhalte. Wenn eine Sitzung noch nicht existiert, macht es keinen Sinn, eine zu erstellen, nur um sie dann ungültig zu machen. Dies gilt auch, wenn die Sitzung gerade vom Container erstellt wurde (aufgrund der ersten http-Anfrage des Benutzers direkt auf dem Anmeldeformular).

public static ... (HttpServletRequest request) { 
    HttpSession session = request.getSession(false);
    if (session!=null && !session.isNew()) {
        session.invalidate();
    }

2voto

darioo Punkte 45156

Ihre Antwort scheint optimal zu sein. Eine andere Möglichkeit wäre, die Köchinnen und Köche direkt auf diese Weise zu manipulieren:

 Cookie cookie = new Cookie ("JSESSIONID", "randomValue");
 cookie.setMaxAge( 0 );

Sie erstellen also ein neues Cookie mit demselben Namen und lassen es sofort ablaufen, aber ich nicht empfehlen diesen Weg zu gehen, da Ihre viel sauberer und ziemlich offensichtlich für jeden, der mit grundlegenden Servlet-APIs vertraut ist.

2voto

MartinGrotzke Punkte 1301

Tomcat (seit 6.0.24 AFAIK) kann die sessionId bei der Authentifizierung automatisch ändern - solange Sie Standard-Servlet-Authentifizierungsmechanismen verwenden (einfache, formularbasierte Authentifizierung). Dies kann über changeSessionIdOnAuthentication für das Basic Authenticator Valve konfiguriert werden: http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html

1voto

Ritesh Punkte 7322

Eine andere Möglichkeit (nicht die bessere) ist der Aufruf von 'changeSessionId(existingSession)' von org.apache.catalina.session.StandardManager was die Sitzungs-ID der aktuellen Sitzung in eine neue, zufällig generierte Sitzungs-ID ändert.

Sie müssen StandardManager Mbean verwenden, um diese Methode aufzurufen. Siehe bitte Tomcat MBeans

Pseudo-Code:

ObjectName contextObjectName = new ObjectName("Catalina:type=Manager,path=/whatever,host=whateverhost");

mbeanServer.invoke(contextObjectName, "changeSessionId", new Object[]{session}, new String[]{"javax.servlet.http.HttpSession"});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X