Ich habe eine App mit Spring MVC erstellt und mit Spring-Sicherheit gesichert, eine Reihe von Controllern sind JSON Rest Services, die alle geschützt sind. Ich verwende LoginUrlAuthenticationEntryPoint
, um AJAX-Anfragen zu erkennen und 403
ERROR CODE zu senden, wenn das Session-Timeout auftritt - alle anderen Anfragen werden einfach zurück zur Login-Seite geleitet.
Nachfolgend finden Sie das Spring Security-XML-Snippet und die Java-Klasse authenticationEntryPoint.
Das Problem ist, dass der erste AJAX-Request nach Sitzungszeitlimit Spring auf die Anmeldeseite umleitet und HTML zurückgibt, wenn ich versuche, die AJAX-Anfrage erneut zu machen (nachdem Redirect passiert ist), führt der authenticationEntryPoint aus und der HTTP-Fehlercode 403 wird zurückgegeben . Ich habe dasselbe mit diesem Mechanismus versucht Ссылка und das gleiche passiert genau (bei der ersten AJAX-Anfrage erfolgt eine Weiterleitung, alle nachfolgenden AJAX-Anfragen HTTP 403 wird zurückgegeben). Ich möchte keine Redirect-Anmeldeseite für AJAX-Anfragen erhalten, bei denen die Sitzung abgelaufen ist.
Irgendwelche Ideen?
%Vor%Hier ist der LoginAuthenticationEntryPoint:
%Vor%Ich habe dieses Problem behoben, indem ich es durch einen eigenen benutzerdefinierten Filter implementiert habe, indem ich es vor ANONYMOUS_FILTER platziere und 403 zurückgebe, wenn der Spring-Principal nicht existiert.
Ich weiß, dass das schon seit einiger Zeit ist, aber ich möchte es hier sehen, um zu sehen, ob es jemand anderem hilft.
Ich folgte der gleichen Idee in Ссылка und hatte das gleiche Problem darin, dass der erste zurückgegebene Inhalt die Anmeldeseite war und der nächste ein HTTP 403 war.
Ich denke, das ist der Teil von Spring, wo wir die Trennung zwischen der Spring XML-Konfiguration und allem tun, oder wir schreiben eine Menge Code, um zu überladen, was sie für uns tun kann. Ich bevorzuge es, so viel wie möglich in der XML-Konfiguration zu tun.
Meine Lösung bestand darin, dass die XML-Konfiguration einen 403-Fehler ausgelöst hat, was der Blog hat. Ich habe keine Matching
-Klasse geschrieben, weil mein Workflow es erfordert, zur ersten Seite zurückzukehren, also verwende ich nicht org.springframework.security.web.savedrequest.HttpSessionRequestCache
.
Ich bin ein großer Fan von Nistbohnen, wenn ich sie nicht woanders brauche. In meinem $.ajax
Anruf stelle ich
Um sicherzustellen, dass der zurückgegebene Inhalt nicht JSON ist (z. B. die Anmeldeseite), wird die Funktion error
aufgerufen. Dies wird auch einen Fehler von 403 abfangen.
Ich suche nach dem rememberMe
-Text, um sicherzustellen, dass es sich um die Anmeldeseite handelt. Ich erwarte das auf keiner anderen Seite.
Tags und Links spring ajax spring-mvc spring-security