Immer 403 mit CSRF-token in spring security
Bin ich auf ein Problem mit mehreren tabs. Wenn ich die Abmeldung von der ersten Registerkarte, und öffnen Sie eine andere Registerkarte, und Sie nach dem anmelden und Abmelden wenn ich gehen Sie zurück zum ersten tab und login bekomme ich 403. Zum Beispiel, der logout-Seite der erste Reiter hatte Folgendes Hinzugefügt, um die form von spring security und thymeleaf:
<input type="hidden" name="_csrf" value="7b9639ba-aaae-4ed2-aad2-bb4c5930458e">
wo das login-Formular der zweiten Registerkarte Hinzugefügt einen anderen csrf-token.
<input type="hidden" name="_csrf" value="659324d5-ec5c-4c57-9984-dab740746285">
Nun, wenn ich gehen, um erste Register und login von dort bekomme ich 403 forbidden. Was Sinn macht, da csrf-token ist jetzt abgestanden. Aber wie bekomme ich dieses? Ich bin auch immer 403 forbidden, wenn der Benutzer abgemeldet war von Inaktivität und Weiterleitung auf die login-Seite, sondern versuchte, sich einloggen erst wieder nach einer Weile, sagen wir einer halben Stunde.
- Haben Sie überprüft, spring-Dokumentation unter Frühling.io/blog/2013/08/21/.... Es scheint nicht zu sein, einen workaround für login-Problem. Bezüglich deinem letzten Satz, es erscheint zu sein wegen Ablauf der Sitzung. (Timeouts Abschnitt in der Dokumentation)
- Wir lief in ein ähnliches Problem und gelöst werden, mithilfe einer benutzerdefinierten
AccessDeniedHandler
(siehe stackoverflow.com/a/47399348/225217).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als von Spring Security 3.2 haben wir die
CsrfTokenRepository
- Schnittstelle, die können Sie speichern Sie die synchronizer-token, aber Sie sehen, passen, wie in einer Datenbank. Dies gibt Ihnen die Möglichkeit, verfallen diese Token, aber Sie wollen, um zu vermeiden, dass veraltete Token in Ihren Fall.Wenn Sie wollen, um eine schönere Fehlermeldung, wenn etwas hat schief gehen, können Sie einen benutzerdefinierten
AccessDeniedHandler
Umsetzung, verwaltet dieMissingCsrfTokenException
undInvalidCsrfTokenException
Ausnahmen um eine weitere informative Nachricht.UPDATE:
Habe ich einen interceptor, der behandelt alle meine nicht abgefangene Ausnahmen, so habe ich gerade gebaut, ein wenig AccessDeniedHandler, dass rethrows die CSRF-bezogenen Ausnahmen:
Den einfachsten Ansatz zur Behandlung der Zugriff verweigert Fehler, die ich verwendet habe, wurde die Einstellung der Zugriff verweigert handler innerhalb Ihrer security config umleiten, um Ihre login-Seite.