반응형
Redirect
Redirect는 현재 요청에 대한 응답을 뷰로 생성해서 보내는 대신 브라우저에게 새로운 URL로 요청을 다시 보내라고 지시하는 응답 방식입니다. Redirect의 사용 이유는 다음과 같습니다.
- 페이지 이동
사용자가 한 페이지에서 다른 페이지로 이동해야 할 때 리다이렉트를 사용할 수 있습니다. 예를 들어, 로그인이 성공하면 로그인 페이지에서 메인 페이지로 리다이렉트할 수 있습니다. - SEO (Search Engine Optimization)
URL 구조를 변경하거나 구형 URL을 새로운 URL로 대체할 때 리다이렉트를 사용하면 검색 엔진이 새로운 URL을 인식하고 새로운 페이지를 색인할 수 있습니다. 이는 검색 엔진 최적화를 향상시키는 데 도움이 됩니다. - 중복 제출 방지
폼 처리 후 리다이렉트를 사용하면 사용자가 '새로 고침' 버튼을 클릭하여 중복 제출을 방지할 수 있습니다. POST로 폼의 결과를 전송했을 경우, 바로 View로 출력하게 되면 마지막 전송 결과가 브라우저에 남아 있어서 페이지 갱신을 하면 폼이 다시 전송될 위험이 있습니다. Redirect를 이용해서 GET 방식의 새로운 URL로 다시 요청하도록 만들면 중복 제출을 방지할 수 있습니다. - 외부 리소스로의 안내
외부 리소스(예: 외부 API)에 접근하기 위해 사용자를 해당 리소스로 리다이렉트할 수 있습니다. 예를 들어, OAuth 인증을 수행해야 하는 경우 사용자를 인증 서비스의 페이지로 리다이렉트하여 인증을 수행할 수 있습니다.
방법1: 요청 경로 Redirect
@Controller
public class MyController {
@PostMapping("/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
RedirectAttributes redirectAttributes) {
// ...
if (isLoginSuccess) {
// 로그인 성공 시 리다이렉트하며 메시지 전달
redirectAttributes.addFlashAttribute("msg", "로그인에 성공했습니다.");
return "redirect:/main";
} else {
// 로그인 실패 시 리다이렉트하며 에러 메시지 전달
redirectAttributes.addFlashAttribute("error", "로그인에 실패했습니다.");
return "redirect:/login";
}
}
}
`RedirectAttributes`
이를 통해 리다이렉트 시에 URL에 파라미터를 전달할 수 있습니다. 즉, URL에 데이터를 추가할 수 있습니다.
아래는 `RedirectAttributes` 예시입니다.
redirectAttributes.addAttribute("accountId", registedAccount.getAccountId());
return "redirect:/account/regist?complete";
// URL: /account/regist?complete&accountId=cus001
redirectAttributes.addAttribute("accountId", registedAccount.getAccountId());
return "redirect:/account/{accountId}?registComplete";
// URL: /account/cus001?registComplete
방법2: RedirectView
`RedirectView`는 요청을 다른 URL로 리다이렉트하는데 사용되는 View클래스 입니다.
@Controller
public class MyController {
@GetMapping("/example")
public RedirectView redirectExample() {
RedirectView redirectView = new RedirectView();
redirectView.setUrl("https://example.com");
return redirectView;
}
}
반응형
'Spring Framework' 카테고리의 다른 글
Spring Thymeleaf 살펴보기 (0) | 2022.10.06 |
---|---|
Spring ResponseEntity (0) | 2022.09.21 |
Spring 비동기 처리 @Async, CompletableFuture, TaskDecorator (0) | 2022.09.09 |
Spring 파일 업로드 (0) | 2022.09.07 |
Spring @SessionAttributes, @SessionStatus: Model과 연동을 통한 상태 유지 (0) | 2022.09.07 |