Pregunta

Estoy usando la seguridad de primavera para restringir las URL. Estoy tratando de proporcionar una página de registro e inicio de sesión, en la misma página.

Al iniciar sesión, Spring Security se transfiere a la página restringida. Sin embargo, estoy tratando de pasar la URL de destino al proceso de registro, para que después del registro podamos redirigir a la página restringida.

Cómo obtener la URL real desde la que se redirigió al usuario.

¿Alguna idea?

¿Fue útil?

Solución

Así es como obtuve la URL de Spring Security.

SavedRequest savedRequest = (SavedRequest)session.getAttribute(
    AbstractProcessingFilter.SPRING_SECURITY_SAVED_REQUEST_KEY);
String requestUrl = savedRequest.getFullRequestUrl();

Otros consejos

Se movieron un poco en Spring Security 3.0, por lo que el fragmento de código anterior ya no funciona. Sin embargo, esto hace el truco:

protected String getRedirectUrl(HttpServletRequest request) {
    HttpSession session = request.getSession(false);
    if(session != null) {
        SavedRequest savedRequest = (SavedRequest) session.getAttribute(WebAttributes.SAVED_REQUEST);
        if(savedRequest != null) {
            return savedRequest.getRedirectUrl();
        }
    }

    /* return a sane default in case data isn't there */
    return request.getContextPath() + "/";
}

con seguridad de primavera 4.1.4:

@Override
public void onAuthenticationSuccess(HttpServletRequest request,
        HttpServletResponse response, Authentication authentication)
        throws IOException, ServletException {

    SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response);
    if (savedRequest != null) {
        response.sendRedirect(savedRequest.getRedirectUrl());
    }
    else{
        response.sendRedirect("some/path");
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top