Ich habe ein CSRF-Token mit Spring Security in meinem Spring MVC-Projekt integriert. Alles funktioniert ordnungsgemäß mit CSRF-Token, Token wird von Client-Seite an Server-Seite gesendet.
Ich habe meinen logout
-Prozess geändert, um POST
-Methode zum Senden des CSRF-Tokens zu machen, und es funktioniert einwandfrei.
Ich habe ein Gesichtsproblem, wenn Sitzungs-Timeout aufgetreten ist, es muss zu Spring-Standard-Logout-URL umgeleitet werden, aber es gibt mir Access Denied
für diese URL.
Wie kann dieses Verhalten überschrieben werden?
Ich habe unterhalb der Zeile in der Sicherheitskonfigurationsdatei
%Vor%Bitte lassen Sie mich wissen, wenn jemand mehr Informationen benötigt.
Die Frage ist ein bisschen alt, aber Antworten sind immer nützlich.
Erstens ist dies ein bekanntes Problem mit CSRF-Tokens, die von Sitzungen unterstützt werden, wie in den Dokumenten beschrieben: CSRF-Vorbehalte - Timeouts .
Um das Problem zu lösen, verwenden Sie Javascript, um bevorstehende Timeouts zu erkennen, verwenden Sie ein sitzungsunabhängiges CSRF-Token-Repository oder erstellen Sie eine benutzerdefinierte AccessDeniedHandler
-Route. Ich habe letzteres gewählt:
Konfigurations-XML:
%Vor%MyAccessDeniedHandler:
%Vor% Alternativ können Sie den benutzerdefinierten Handler als DelegatingAccessDeniedHandler
definieren:
Die Antwort, die von mdrg zur Verfügung gestellt wird, ist richtig, und ich habe auch eine benutzerdefinierte AccessDeniedHandler
implementiert, die ich für Ihre Überlegung einreiche:
Mit java config verdrahtet:
%Vor%Tags und Links spring spring-mvc spring-security csrf-protection