Vielleicht ist dies die alte Frage, aber während meiner jüngsten Forschung in diesem Thema, fand ich, dass das Problem häufig ist und immer noch (vor allem im Falle von modernen AngularJS Front-End-Anwendungen mit Back-End-Sicherheit). Ich möchte meine Lösung mit Ihnen teilen.
auf der Anmeldeseite, zB /login.html, folgenden Code setzt vor dem </body>
tag:
<script type="text/javascript">
var hash = window.location.hash;
document.cookie="hashPart=" + window.btoa(hash);
</script>
Anmerkung (1): btoa() Funktion funktioniert in IE> = 10 (http://www.w3schools.com/jsref/met_win_btoa.asp), Für ältere Browser verwenden Sie jQuery-Äquivalent.
Anmerkung (2): Die Verschlüsselung des # Teils der URL ist notwendig, da es Sonderzeichen enthält, das nicht erlaubt ist in Cookie-Wert Zeichenfolge gespeichert werden.
Von der Serverseite müssen Sie onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
Methode der Implementierung der Klasse AuthenticationSuccessHandler
Schnittstelle ändern.
In meinem Fall erweitere ich einfach die Klasse SavedRequestAwareAuthenticationSuccessHandler
und überschreibe die onAuthenticationSuccess
Methode mit ihrem ursprünglichen Code. Dann erhalte ich den hashPart Cookie-Wert aus der Anfrage, dekodiere ihn und füge der aufgelösten Weiterleitungs-URL hinzu. Mein Code-Fragment:
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication)
throws ServletException, IOException {
// ... copy/paste original implementation here, until ...
// Use the DefaultSavedRequest URL
String targetUrl = savedRequest.getRedirectUrl();
for (Cookie cookie : req.getCookies()) {
if (cookie.getName().equals("hashPart")) {
targetUrl += new String(Base64Utils.decodeFromString(cookie.getValue()));
cookie.setMaxAge(0); // clear cookie as no longer needed
response.addCookie(cookie);
break;
}
}
getRedirectStrategy().sendRedirect(request, response, targetUrl);
}
schließlich nur Ihren Erfolg Handler-Klasse zu Ihrer Konfiguration Spring Security injizieren, wie beschrieben in: https://stackoverflow.com/a/21100458/3076403
Ich freue mich auf Ihre Kommentare oder andere Lösungen für dieses Problem.
können Sie Beispielpfade angeben –
Ich tat es in der Frage:/Pfad/zu/Seite/und #/Pfad/zu/Seite – nKognito
[Sie können Hash auf Serverseite nicht verwenden] (http: // stackoverflow. com/questions/317760/how-to-get-URL-Hash-von-Server-Seite). – Xaerxess