다음 코드가 사용자를 프로젝트 내부의 URL로 리디렉션하는 것으로 나타났습니다.
@RequestMapping(method = RequestMethod.POST)
public String processForm(HttpServletRequest request, LoginForm loginForm,
BindingResult result, ModelMap model)
{
String redirectUrl = "yahoo.com";
return "redirect:" + redirectUrl;
}
반면 다음은 의도 한대로 올바르게 리디렉션되지만 http : // 또는 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;
}
리디렉션이 유효한 프로토콜이 있는지 여부에 관계없이 항상 지정된 URL로 리디렉션하고보기로 리디렉션하고 싶지 않습니다. 어떻게 할 수 있습니까?
감사,
답변
두 가지 방법으로 할 수 있습니다.
먼저:
@RequestMapping(value = "/redirect", method = RequestMethod.GET)
public void method(HttpServletResponse httpServletResponse) {
httpServletResponse.setHeader("Location", projectUrl);
httpServletResponse.setStatus(302);
}
둘째:
@RequestMapping(value = "/redirect", method = RequestMethod.GET)
public ModelAndView method() {
return new ModelAndView("redirect:" + projectUrl);
}
답변
당신은을 사용할 수 있습니다 RedirectView
. JavaDoc 에서 복사 :
절대, 컨텍스트 상대 또는 현재 요청 상대 URL로 리디렉션되는보기
예:
@RequestMapping("/to-be-redirected")
public RedirectView localRedirect() {
RedirectView redirectView = new RedirectView();
redirectView.setUrl("http://www.yahoo.com");
return redirectView;
}
ResponseEntity
예를 들어를 사용할 수도 있습니다.
@RequestMapping("/to-be-redirected")
public ResponseEntity<Object> redirectToExternalUrl() throws URISyntaxException {
URI yahoo = new URI("http://www.yahoo.com");
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setLocation(yahoo);
return new ResponseEntity<>(httpHeaders, HttpStatus.SEE_OTHER);
}
물론 redirect:http://www.yahoo.com
다른 사람들이 언급 한대로 돌아 오십시오 .
답변
UrlBasedViewResolver 및 RedirectView 의 실제 구현을 살펴보면 리디렉션 대상이 /로 시작하는 경우 리디렉션은 항상 contextRelative가됩니다. 따라서 //yahoo.com/path/to/resource를 보내는 것도 프로토콜 상대 리디렉션을 얻는 데 도움이되지 않습니다.
따라서 시도하고있는 것을 달성하려면 다음과 같이 할 수 있습니다.
@RequestMapping(method = RequestMethod.POST)
public String processForm(HttpServletRequest request, LoginForm loginForm,
BindingResult result, ModelMap model)
{
String redirectUrl = request.getScheme() + "://www.yahoo.com";
return "redirect:" + redirectUrl;
}
답변
이를 수행하는 또 다른 방법은 다음 sendRedirect
방법 을 사용하는 것입니다.
@RequestMapping(
value = "/",
method = RequestMethod.GET)
public void redirectToTwitter(HttpServletResponse httpServletResponse) throws IOException {
httpServletResponse.sendRedirect("https://twitter.com");
}
답변
다음 ResponseEntity
과 같이 사용하여 매우 간결하게 할 수 있습니다 .
@GetMapping
ResponseEntity<Void> redirect() {
return ResponseEntity.status(HttpStatus.FOUND)
.location(URI.create("http://www.yahoo.com"))
.build();
}
답변
나를 위해 잘 작동합니다.
@RequestMapping (value = "/{id}", method = RequestMethod.GET)
public ResponseEntity<Object> redirectToExternalUrl() throws URISyntaxException {
URI uri = new URI("http://www.google.com");
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setLocation(uri);
return new ResponseEntity<>(httpHeaders, HttpStatus.SEE_OTHER);
}
답변
외부 URL의 경우 ” http://www.yahoo.com “을 리디렉션 URL로 사용해야 합니다.
이것은 Spring 참조 문서 의 redirect : prefix 에 설명되어 있습니다.
리디렉션 : / myapp / some / resource
현재 서블릿 컨텍스트를 기준으로 리디렉션되며 다음과 같은 이름은
절대 URL로 리디렉션됩니다.