Apache Tomcat 7 Ändern JSESSIONID auf Jede Anfrage
Dieses Problem treibt mich in den Wahnsinn, also vielleicht jemand könnte mir helfen zu verstehen, was das Problem ist. Ich habe eine tomcat-Webapplikation, angeführt von HAProxy. HAProxy ist auch SSL-Verschiebung und konfiguriert ist, um sticky sessions. Ich bin mit der Tomcat session replication feature, das scheint zu funktionieren nur fine. Die Sitzungen erscheinen auf den beiden Anwendungsserver verwenden.
Aus irgendeinem Grund, Tomcat ist die Erzeugung eines neuen JSESSIONID für jede einzelne web-Anfrage, und dann kopieren den Inhalt der alten session in die neue session. Das ist zu sagen, dass meine session-Inhalte sind immer noch da in der neuen session, sondern eine neue ID generiert und an den client zurückgeschickt. Aber es macht nur dieses für meine web-Anwendung. Er tut es nicht für den /manager-Anwendung.
Habe ich versucht jeden trick im Buch, wie Sie dies in meine context.xml:
<Valve className="org.apache.catalina.authenticator.BasicAuthenticator" changeSessionIdOnAuthentication="false" />
Und setzen diese Attribute auf meine Context-element:
<Context path="/myapp" reloadable="false" override="true" useNaming="false" allowLinking="true" useHttpOnly="false" sessionCookiePath="/" sessionCookiePathUsesTrailingSlash="false">
Und dennoch, das Ergebnis ist das gleiche. Tomcat generiert eine neue session-id mit jeder Anfrage und kopiert den Inhalt der alten session in die neue id.
Ich würde vermuten, es hatte etwas zu tun mit HAProxy, außer dass der - /manager-Anwendung ist auch hinter HAProxy und es weist dieses Verhalten nicht.
Warum ist Tomcat, dies zu tun, und was kann ich tun um es zu verhindern?
Sorry, ich bin dir nicht folgt. Ich bin auch nicht der Kollision mit einem JSP für meinen test.
Ich Frage mich, was war das eigentliche Problem mit diesem. Welchen Schaden tut es das, wenn JSESSIONID verpasst?
InformationsquelleAutor Nobody | 2013-01-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellt sich heraus, dass es war die Ursache von Spring Security. Wir sind mit Spring Security 3.1 x, und standardmäßig speichert es die authentifizierten Anmeldeinformationen in der Sitzung des Benutzers. Und gegen session-fixation-Attacken, es kopiert automatisch den Inhalt des Benutzer-session eine neue session-id ungültig und die alte Sitzung.
Fix war, fügen Sie den folgenden, um die http-element in der Sicherheits-Konfiguration, da brauchen wir nicht die session-in unserer Anwendung:
Hoffentlich hilft jemand anderes auf der ganzen Linie.
Zumindest von Spring Security 3.2.5, es ist auch die session fixation Verhalten standardmäßig aktiviert. Konfigurieren
HttpSecurity http
in einem benutzerdefiniertenWebSecurityConfigurerAdapter
mit einemhttp.sessionManagement().sessionFixation().none();
das problem lösen kann. Doppelt prüfen, ob die Folgen, die dann (nicht mehr die automatische session fixation).InformationsquelleAutor Nobody
Ich hab das gleiche problem mit der neuen session-id, wenn ich die Seite aktualisieren
Auf tomcat7 server, ich nur hinzufügen, in der context.xml dieser code :
Diese Arbeit gut für mich.
InformationsquelleAutor Patrikoko
Nicht sicher, was genau dein problem ist, aber es gibt zwei Dinge würde ich prüfen. Zuerst haben Sie geben Sie den jvmRoute in tomcat?
Tomcat
server.xml
Haproxy.cfg (Referenzen jvmRoute)
Tomcat fügt den Namen des Servers, der das cookie, so dass die Einstellung nicht, die Probleme verursachen können.
Andere Sache zu prüfen ist, um sicherzustellen, dass Sie Hinzugefügt die folgende Zeile zu Ihrer
web.xml
imweb-app
AbschnittVergaß hinzuzufügen, ich habe bereits meine webapp gekennzeichnet verteilbar. Wie gesagt, meine session-Replikation ist in Ordnung.
tut mir Leid, ich konnte nicht mehr helfen, aber ich dachte, es war einen Versuch Wert. Wir verwenden die gleiche Konfiguration, und hatte ein ähnliches Problem, wenn wir die Dinge so einzurichten. In unserem Fall war es, weil HAProxy wurde mangeln die cookie-und es wurde immer prallte zwischen den Servern in regelmäßigen Abständen. Einstellung der
jvmRoute
auf Tomcat und diecookie
,appsession
, undserver
entsprechend fest, die es für uns.Ich Schätze die Mühe, aber das scheint nicht das Problem in unserem Fall. Auch der Lastenausgleich mit sticky-sessions richtig funktioniert. Wir werden nie bekommen, prallte zwischen den Servern. Wie ich schon in meiner Frage, funktioniert alles einwandfrei für die manager-app, so dass es etwas über die Konfiguration für meine webapp, aber nicht in der Lage gewesen, um herauszufinden, was das ist.
InformationsquelleAutor jcern