2011-01-13 21 views
6

He declarado lo siguiente en mi archivo de configuración de seguridad de primavera (http://www.springframework.org/schema/security/spring-security-2.0.1.xsd) :Obtener url de solicitud original en Spring Security formulario-página de inicio de sesión

<form-login login-page="/login.html" /> 

Lo que hace Spring Security es redirigir al usuario a esa página si no tiene las credenciales de autenticación correctas. ¿Cómo puedo obtener la URL de la página que el usuario estaba tratando de obtener?

+1

posiblemente relacionados con http://stackoverflow.com/questions/631217/spring-security-how-to-get-the-initial-target-url – Raghuram

+0

Gracias por el enlace! –

Respuesta

9

La solicitud original está representada por el objeto SavedRequest, al que se puede acceder como un atributo de sesión denominado SPRING_SECURITY_SAVED_REQUEST_KEY.

+0

Mirando los documentos a los que lo vincula dice 'desde 3.0'. Estoy usando Spring Security 2 (como se menciona en la pregunta). ¿Sabes si esto funcionará? –

+1

@Adbullah: Creo que en Spring Security 2 funciona de la misma manera: http://static.springsource.org/spring-security/site/docs/2.0.x/apidocs/org/springframework/security/ui/savedrequest/ SavedRequest.html – axtavt

+0

Gracias, desafortunadamente, creo que he estado haciendo una pregunta incorrecta sobre lo que quiero hacer, revise la nueva pregunta si tiene una oportunidad: http://stackoverflow.com/questions/4696905/make-spring -security-add-the-return-to-url-in-the-query-string-for-the-login-page –

0

En la primavera de Seguridad 4

La solicitud original está representado por el objeto DefaultSavedRequest, que se puede acceder como un atributo de sesión llamada SPRING_SECURITY_SAVED_REQUEST.

@RequestMapping(value = "/login", method = RequestMethod.GET) 
public String login(HttpSession session) { 
    DefaultSavedRequest savedRequest = (DefaultSavedRequest) session.getAttribute("SPRING_SECURITY_SAVED_REQUEST"); 
} 
0

en mi caso hice algo como esto y funcionó para mí.

@Autowired 
private LoggedUserListener loggedUserListener; 

@Override 
protected void configure(HttpSecurity http) throws Exception { 
http.csrf().disable() 
    .authorizeRequests() 
    .antMatchers("/find/**","/","/Application/**") 
    .access("hasRole('ROLE_USER')") 
    .successHandler(loggedUserListener) 
//some other stuff 
} 



@Component 
public class LoggedUserListener implements AuthenticationSuccessHandler{ 

@Autowired 
private UserRepo userRepo; 

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

    HttpSession session = request.getSession(); 
    SavedRequest savedRequest = (SavedRequest) session.getAttribute("SPRING_SECURITY_SAVED_REQUEST"); 

    if(savedRequest != null) { 

     User u = userRepo.findByUsername(authentication.getName()); 

     u.setLastLogin(new Date()); 
     u.setAccountNonLocked(false); 

     userRepo.save(u); 
     response.sendRedirect(savedRequest.getRedirectUrl()); 
    } 
    } 

} 
Cuestiones relacionadas