2012-02-16 38 views
36

Quiero que mi aplicación Spring MVC redirija a una URL dinámica (enviada por el usuario). Entonces, si tengo un código como este,Redirigir a una URL dinámica en Spring MVC

@RequestMapping("/redirectToSite") 
protected ModelAndView redirect(
    @RequestParam("redir_url") String redirectUrl, 
    HttpServletRequest request, 
    HttpServletResponse response) 
{ 
    // redirect to redirectUrl here 
    return ? 
} 

¿Qué debo escribir para redirigir a la URL enviada? Por ejemplo, http://mySpringMvcApp/redirectToSite?redir_url=http://www.google.com debe redireccionar a Google.

+4

han intentado nueva ModelAndView (nueva RedirectView (redirectUrl))? – Joe

+1

@Joe: Funcionó también. Buena cosa. – Gruber

+1

No estoy seguro si pensó en esto, pero debe considerar que los redireccionamientos abiertos son un patrón anti de seguridad y al menos debe hacer una validación básica de la URL enviada antes de redireccionar a ella. Ver p. https://www.owasp.org/index.php/Unvalidated_Redirects_and_Forwards_Cheat_Sheet – Kutzi

Respuesta

77

Prueba esto:

@RequestMapping("/redirectToSite") 
protected String redirect(@RequestParam("redir_url") String redirectUrl) 
{ 
    return "redirect:" + redirectUrl; 
} 

Esto se explica en 16.5.3.2 The redirect: prefix de la primavera reference documentation. Por supuesto, siempre se puede hacer esto manualmente:

response.sendRedirect(redirectUrl); 
+1

Muchas gracias, solo lo probé y funcionó. Tuvo que cambiar el tipo de devolución del método de 'ModelAndView' a' String'. – Gruber

+0

@ user1035411: Es cierto que actualicé mi respuesta para reflejar esto. –

+0

@TomaszNurkiewicz este método preserva los parámetros de consulta en la url, ¿cómo me deshago de los parámetros de consulta y los redirecciono solo a la url sin parámetros de consulta? –

5
@RequestMapping(value="/redirect",method=RequestMethod.GET) 
void homeController(HttpServletResponse http){ 
    try { 
    http.sendRedirect("Your url here!"); 
    } catch (IOException ex) { 

    } 
} 
+0

Volver "redirigir: http: //www.stackoverflow.com" no funcionó para mí. ¡Pulgares hacia arriba! – shimatai

Cuestiones relacionadas