2012-02-16 14 views
36

Я хочу, чтобы приложение Spring MVC перенаправлялось на динамический URL-адрес (отправленный пользователем). Поэтому, если у меня есть код, подобный этому,Перенаправление на динамический URL в Spring MVC

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

Что я должен писать для перенаправления на указанный URL? Например, http://mySpringMvcApp/redirectToSite?redir_url=http://www.google.com должен перенаправить на Google.

+4

вы пробовали новый ModelAndView (новый RedirectView (redirectUrl))? – Joe

+1

@ Joe: Работал также. Качественный товар. – Gruber

+1

Не уверен, что вы подумали об этом, но вы должны учитывать, что открытые переадресации - это антивирус, и вы должны, по крайней мере, выполнить базовую проверку представленного URL-адреса до фактического перенаправления на него. См., Например, https://www.owasp.org/index.php/Unvalidated_Redirects_and_Forwards_Cheat_Sheet – Kutzi

ответ

77

Попробуйте это:

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

Это объясняется в 16.5.3.2 The redirect: prefix весны reference documentation. Конечно, вы всегда можете сделать это вручную:

response.sendRedirect(redirectUrl); 
+1

Большое спасибо, просто протестировали его, и он сработал. Требуется изменить тип возвращаемого метода из 'ModelAndView' в' String'. – Gruber

+0

@ user1035411: Верно, я обновил свой ответ, чтобы отразить это. –

+0

@TomaszNurkiewicz этот метод сохраняет параметры запроса в URL-адресе, как мне избавиться от параметров запроса и перенаправить только на URL-адрес без параметров запроса? –

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

    } 
} 
+0

Возвращение «redirect: http: //www.stackoverflow.com» не сработало для меня. Пальцы вверх! – shimatai

Смежные вопросы