Wie setzen Sie JSESSIONID
Wird es als eine gute Sicherheit der Praxis zum zurücksetzen der session-cookie, wenn ein Benutzer authentifiziert.
Wie dies mit Java?
Mein Versuch so weit ist erfolgreich, aber ich Frage mich, ob es einen besseren Weg:
public static HttpSession resetSessionId(HttpSession session,
HttpServletRequest request) {
session.invalidate();
session = request.getSession(true);
return session;
}
- Ich denke, dass ist der beste Weg...
- Ich habe versucht, Ihren Weg. Aber die JSESSIONID nicht zurückgesetzt. Wissen Sie wissen, warum? Im mit Harz als meine web-container.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Antwort scheint optimal. Eine andere Möglichkeit wäre, direkt zu manipulieren cookes in diesem Mode:
so erstellen Sie ein neues cookie mit dem gleichen Namen, und sofort verfallen, aber ich nicht empfehlen so aus, da deins ist viel sauberer und klar, wer ist vertraut mit grundlegenden Servlet-APIs.
true
, denn ich bin Authentifizierung über SSLIch nur die bitte aus, die ich die Sitzung. Wenn eine Sitzung noch nicht existiert, es gibt keinen Sinn in der Schaffung eines einfach nur, dass es ungültig ist. Dies gilt auch, wenn die session wurde gerade erstellt, indem die container (durch den Benutzer erste http-request direkt auf dem login-Formular).
Tomcat (seit 6.0.24 AFAIK) ändern können, die sessionId-on authentication automatisch - solange Sie mit standard-servlet-Authentifizierung-Mechanismen (basic, form-basierte Authentifizierung). Diese können konfiguriert werden über changeSessionIdOnAuthentication für die Basic Authenticator-Ventil: http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html
Einen anderen Weg (nicht der bessere Weg) ist zu nennen 'changeSessionId(existingSession)' von
org.apache.catalina.session.StandardManager
die änderung der session-ID der aktuellen Sitzung in eine neue zufällig generierte session-ID.Verwenden Sie StandardManager Mbean, die zum aufrufen dieser Methode. Bitte sehen Tomcat-MBeans
Pseudo-code:
ObjectName contextObjectName = new ObjectName("Catalina:type=Manager,path=/was auch immer,host=whateverhost");
mbeanServer.invoke(contextObjectName, "changeSessionId", new Object[]{session}, new String[]{"javax.- servlet.http.HttpSession"});