2012-02-16 13 views
36

Desidero reindirizzare l'applicazione Spring MVC a un URL dinamico (inviato dall'utente). Quindi, se ho il codice come questo,Reindirizza all'URL dinamico in Spring MVC

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

cosa devo scrivere per reindirizzare all'URL presentata? Ad esempio, http://mySpringMvcApp/redirectToSite?redir_url=http://www.google.com dovrebbe reindirizzare a Google.

+4

avete provato nuovi ModelAndView (nuova RedirectView (redirectUrl))? – Joe

+1

@Joe: ha funzionato bene. Grandi cose. – Gruber

+1

Non sei sicuro se hai pensato a questo, ma dovresti considerare che i reindirizzamenti aperti sono un pattern anti di sicurezza e dovresti almeno fare una convalida di base dell'URL inviato prima di reindirizzarti effettivamente ad esso. Vedere per es. https://www.owasp.org/index.php/Unvalidated_Redirects_and_Forwards_Cheat_Sheet – Kutzi

risposta

77

Prova questa:

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

Questo è spiegato in 16.5.3.2 The redirect: prefix di primavera reference documentation. Naturalmente si può sempre farlo manualmente:

response.sendRedirect(redirectUrl); 
+1

Grazie mille, l'ho appena testato e ha funzionato. Dovevo cambiare il metodo di ritorno da 'ModelAndView' a' String'. – Gruber

+0

@ user1035411: true, ho aggiornato la mia risposta per riflettere questo. –

+0

@TomaszNurkiewicz questo metodo mantiene i parametri di query nell'URL, come faccio a eliminare i parametri di query e il reindirizzamento solo all'URL senza parametri di query? –

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

    } 
} 
+0

La restituzione di "redirect: http: //www.stackoverflow.com" non ha funzionato per me. Pollice su! – shimatai