2009-03-10 12 views
12

Estoy utilizando la seguridad de primavera para las URL restringidas. Estoy tratando de proporcionar la página de registro e inicio de sesión, en la misma página.Seguridad de primavera: cómo obtener la URL de destino inicial

Al iniciar sesión, la seguridad del muelle 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 de la suscripción podamos redireccionar a la página restringida.

Cómo obtener la URL real de la que se redirige al usuario.

¿Alguna idea?

+0

he configurado 3.1.1.RELEASE primavera y el tratado de utilizar la solución Publicado por ustedes pero de alguna manera me sale sesión como 'nulo'. ¿Alguna idea sobre la razón probable de este comportamiento? – Prabhat

+0

intente 'SavedRequest savedRequest = (SavedRequest) session.getAttribute (" SPRING_SECURITY_SAVED_REQUEST ");' –

+0

Pruebe este: SavedRequest savedRequest = new HttpSessionRequestCache(). GetRequest (solicitud, respuesta); – Jesfre

Respuesta

13

Así es como obtuve la URL de Spring Security.

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

Ellos se movieron las cosas un poco en la seguridad de la primavera 3,0, por lo que el código anterior ya no funciona. Esto hace el truco, sin embargo:

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() + "/"; 
} 
+1

Como nota, WebAttributes no está disponible hasta 3.0.3 – yincrash

+6

'WebAttributes.SAVED_REQUEST' ya no existe en 3.1, sin embargo [esta solución] (http://stackoverflow.com/a/5389357/535646) funciona. –

+5

@TilmanHausherr WebAttributes.SAVED_REQUEST se puede reemplazar por la cadena "SPRING_SECURITY_SAVED_REQUEST" en Spring 3.1 que hace que la solución anterior vuelva a funcionar. – TimS

2

con la 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"); 
    } 
} 
Cuestiones relacionadas