Zauważyłem, że poniższy kod przekierowuje użytkownika na adres URL wewnątrz projektu,
@RequestMapping(method = RequestMethod.POST)
public String processForm(HttpServletRequest request, LoginForm loginForm,
BindingResult result, ModelMap model)
{
String redirectUrl = "yahoo.com";
return "redirect:" + redirectUrl;
}
podczas gdy poniższe przekierowanie zgodnie z przeznaczeniem, ale wymaga http: // lub https: //
@RequestMapping(method = RequestMethod.POST)
public String processForm(HttpServletRequest request, LoginForm loginForm,
BindingResult result, ModelMap model)
{
String redirectUrl = "http://www.yahoo.com";
return "redirect:" + redirectUrl;
}
Chcę, aby przekierowanie zawsze przekierowywało do określonego adresu URL, niezależnie od tego, czy zawiera prawidłowy protokół, czy nie, i nie chcę przekierowywać do widoku. Jak mogę to zrobić?
Dzięki,
java
spring
jsp
spring-mvc
Jake
źródło
źródło
@ResponseStatus(HttpStatus.FOUND)
Możesz użyć
RedirectView
. Skopiowano z JavaDoc :Przykład:
Możesz też użyć
ResponseEntity
npI oczywiście wróć,
redirect:http://www.yahoo.com
jak wspominali inni.źródło
Patrząc na rzeczywistą implementację UrlBasedViewResolver i RedirectView, przekierowanie zawsze będzie kontekstowe, jeśli cel przekierowania zaczyna się od /. Więc także wysłanie //yahoo.com/path/to/resource nie pomogłoby w uzyskaniu względnego przekierowania protokołu.
Aby osiągnąć to, co próbujesz, możesz zrobić coś takiego:
źródło
Innym sposobem jest użycie
sendRedirect
metody:źródło
Możesz to zrobić w dość zwięzły sposób, używając w
ResponseEntity
ten sposób:źródło
U mnie działa dobrze:
źródło
W przypadku zewnętrznego adresu URL musisz użyć „ http://www.yahoo.com ” jako adresu przekierowania.
Jest to wyjaśnione w redirect: prefix dokumentacji referencyjnej Spring.
przekieruje względem bieżącego kontekstu serwletu, podczas gdy nazwa taka jak
przekieruje do bezwzględnego adresu URL
źródło
Czy próbowałeś RedirectView, gdzie możesz podać parametr contextRelative?
źródło
/
aby sprawdzić, czy powinien być względny w kontekście aplikacji internetowej. Żądanie przekierowania nadal będzie skierowane do tego samego hosta.Krótko mówiąc
"redirect://yahoo.com"
, pożyczymyyahoo.com
.gdzie jak
"redirect:yahoo.com"
ci pożyczyszyour-context/yahoo.com
np.localhost:8080/yahoo.com
źródło