2013-04-11 6 views
6

Ich habe nächsten Anwendungsfall:Tomcat/Spring Session Management für anonyme Benutzer

Wir haben Webstore, wo Benutzer einige Waren auswählen und dann kaufen können. Er kann Waren in seinen Warenkorb legen, bevor er sich in der Anwendung anmeldet. Alle diese Elemente müssen in seiner Sitzung gespeichert werden. Wenn der Benutzer auf "Bezahlen" klickt, werden wir seine Zugangsdaten/Karte/etc.

Mein Problem: Wenn ich mich anmelde, bevor Artikel zum Warenkorb hinzugefügt werden, funktioniert alles korrekt. Aber wenn ich versuche, Artikel als anonymer Benutzer in den Warenkorb zu legen, werden die Artikel nicht gespeichert. Ich erhalte immer unterschiedliche JSESSIONID nach dem Aktualisieren jeder Seite als anonymer Benutzer.

Ich entscheide, einfache Anwendung zu erstellen, die mein Problem veranschaulichen. Ich denke, es kann nicht ohne meine Quellen behoben werden.

Hier ist meine Anwendung:

https://github.com/AlexTestAccount/simple_test

Es ist sehr einfach. Es enthält nur einen Controller und eine Session-Bean, in denen ich etwas speichern möchte.

Für Lauf es Sie brauchen gradle, tomcat und definieren enviropment Variable CATALINA_HOME, als Sie verwenden können:

gradle bereitstellen

P. S. Sorry für mein Englisch

Antwort

1

aktivieren Debug Protokollebene für org.springframework.security.web.authentication.session.SessionFixationProtectionStrategy

Es muss eine Log-Anweisung sein, wenn Sie sich einloggen:

>Invalidating session with Id '<originalSessionId>' <and : without> migrating attributes 

Wenn er druckt „ohne Attribute der Migration“, dann müssen Sie Feder securitys konfigurieren SessionFixationProtectionStrategy.migrateSessionAttributes bis true (aber dies sollte die Standardeinstellung sein)

Ein anderes Problem ist vielleicht, dass tomcat die Sitzung ändern, wenn Sie von http zu https wechseln. Um zu überprüfen, dass dies das Problem ist: Wechseln Sie zunächst zu https (NICHT eingeloggt) und Artikel in Ihren Warenkorb und prüfen Sie, ob sie verschwinden. Tomcat sollte jedoch den Sitzungsinhalt beim Wechseln von http zu https beibehalten (aber nicht umgekehrt).

+0

Ich HTTP-Protokoll verwenden und nicht von http zu HTTPS wechseln. – Alex

+0

Haben Sie die Protokollanweisung gefunden? – Ralph

+0

SessionFixationProtectionStrategy wird nicht aufgerufen, wenn ich die Seite aktualisiere. – Alex

0

Sorry Leute, es war Umweltproblem. Ich reinige nur alle meine Cookies für localhost und jetzt funktioniert alles.