2010-04-08 16 views
11

Ich habe ein Login-Logout-System mit Spring Security 3.0.2 implementiert, alles ist in Ordnung, aber für dieses eine Ding: nachdem ich hinzugefügt habe ein session-management-tag mit ungültigen session-url-attribut, bei abmeldung Spring würde mich immer auf der ungültigen session-url statt der logout-success-url umleiten (was es vorher richtig gemacht hat).Spring Security: Umleiten auf ungültige Session-URL anstelle von Logout-success-URL bei erfolgreicher Abmeldung

Gibt es eine Möglichkeit, dieses Verhalten zu vermeiden?

Dies ist meine Konfiguration:

<http use-expressions="true" auto-config="true"> 
     [...some intercept-url's...] 

    <form-login login-page="/login" authentication-failure-url="/login?error=true" 
      login-processing-url="/login-submit" default-target-url="/home" 
      always-use-default-target="true" /> 

    <logout logout-success-url="/home?logout=true" logout-url="/login-logout" /> 

    <session-management invalid-session-url="/home?invalid=true" /> 
</http> 

Vielen Dank.

+1

Ich habe das gleiche Problem. Lösen Sie das? – marioosh

Antwort

3

Verwechseln Sie das Logout-URL-Attribut im Logout-Tag nicht mit dem invalid-session-url-Attribut aus der Sitzungsverwaltung.

Letzteres ist die URL zum Ausführen der Aktion zum Abmelden, während die vorherige die URL ist, an die bei einer Abmeldeaktion weitergeleitet wird.

Um es mit anderen Worten ausgedrückt, beim Erstellen einer Abmelden-Schaltfläche wäre die URL für diese Schaltfläche der logout-url Wert. Jetzt, wenn die Abmeldung abgeschlossen ist, wird Spring-Sicherheit, als Standard, den Root-App-Pfad der Hauptanwendung rendern, d. H .: http://yourserver:yourport/yourwebapp/. Dieser Pfad wird von invalid-session-url überschrieben. Bei der Abmeldung werden Sie also dorthin weitergeleitet.

Zusammenfassend, wenn Sie das gewünschte Verhalten nicht möchten, dann verwenden Sie kein invalid-session-url Attribut. Hoffe, dass hilft.

+0

'invalidate-session =" true "': benutze 'invalid-session-url'. 'invalidate-session =" false "': Verwenden Sie die Abmeldung success handler url. Siehe: [Christophers Antwort] (http://stackoverflow.com/a/14131584/606662) –

6

Standardmäßig führt der Abmeldeprozess zuerst zur Inaktivierung der Sitzung, sodass die Sitzungsverwaltung auf die ungültige Sitzungsseite umgeleitet wird. Durch Angabe von invalidate-session = "false" wird dieses Verhalten behoben.

<sec:logout logout-success-url="/logout" invalidate-session="false" 
delete-cookies="JSESSIONID" /> 
+0

Wie "invalidieren" wir dann die "Sitzung". –

+0

Das Hinzufügen der 'delete-cookies =" JSESSIONID "' sollte ausreichen – mrgrumpy22