Tal vez esta es la vieja pregunta, pero durante mi investigación reciente sobre este tema, encontré que el problema es común y todavía existe (especialmente en el caso de aplicaciones de front-end AngularJS modernas con seguridad de back-end). Me gustaría compartir mi solución contigo.
En la página de inicio de sesión, por ejemplo, /login.html, puso siguiente código antes de la etiqueta </body>
:
<script type="text/javascript">
var hash = window.location.hash;
document.cookie="hashPart=" + window.btoa(hash);
</script>
Nota (1): btoa() función funciona en IE> = 10 (http://www.w3schools.com/jsref/met_win_btoa.asp), para los navegadores más antiguos use el equivalente de jQuery.
Nota (2): El cifrado de la # parte de la URL es necesario, ya que puede contener caracteres especiales, que no se pueden almacenar en la cadena de valor de la cookie.
Desde el lado del servidor tiene que modificar onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
método de clase que implementa la interfaz AuthenticationSuccessHandler
.
En mi caso, simplemente extiendo la clase SavedRequestAwareAuthenticationSuccessHandler
y anulo el método onAuthenticationSuccess
usando su código original. Luego obtengo el valor de cookie hashPart de la solicitud, lo decodifico y lo agrego a la URL de redireccionamiento resuelto. Mi siguiente fragmento de código:
@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);
}
Por último, simplemente inyectar su clase de controlador éxito a la configuración de la primavera de Seguridad, como se describe en: https://stackoverflow.com/a/21100458/3076403
Estoy deseando a sus comentarios u otras soluciones a este problema.
puede proporcionar rutas de ejemplo –
Lo hice en la pregunta:/ruta/a/página/y #/ruta/a/página – nKognito
[No se puede usar hash en el lado del servidor] (http: // stackoverflow. com/questions/317760/how-to-get-url-hash-from-server-side). – Xaerxess