24.05.10 20:23 작성
·
146
·
수정됨
답변 1
0
2024. 05. 11. 19:19
안녕하세요. Jaesang Yoon님
POST 요청 처리 후 사용자를 원래 페이지로 리다이렉트하려면 몇 가지 방법이 있습니다. 가장 흔히 사용하는 방법은 리퀘스트에 리퍼러(referrer) 정보를 활용하거나, 요청 시 현재 페이지의 URL을 명시적으로 전달하는 것입니다.
HTTP 리퍼러는 사용자가 현재 요청을 하기 전에 마지막으로 방문했던 페이지의 URL을 포함하는 헤더입니다. 서버 측에서 이 정보를 읽어서 해당 위치로 리다이렉트할 수 있습니다. 예를 들어, 스프링 프레임워크에서는 다음과 같이 구현할 수 있습니다:
import javax.servlet.http.HttpServletRequest;
// 스프링 컨트롤러 메서드
@PostMapping("/logout")
public String handleLogout(HttpServletRequest request) {
// 로그아웃 처리 로직
// Referrer 헤더에서 이전 페이지 URL 가져오기
String referrer = request.getHeader("referer");
return "redirect:" + referrer;
}
이 방법의 단점은 사용자의 브라우저가 리퍼러를 보내지 않을 수도 있고, 보안상의 이유로 리퍼러를 제거하는 설정을 사용하는 경우가 있다는 것입니다.
페이지를 렌더링할 때 현재 페이지의 URL을 양식의 숨겨진 필드나 쿼리 파라미터로 추가하여 전송할 수 있습니다. 이 방법은 더 신뢰성이 높으며 리퍼러를 사용할 때 발생할 수 있는 문제를 피할 수 있습니다.
예를 들어, 로그아웃 버튼이 포함된 폼이나 링크를 다음과 같이 작성할 수 있습니다:
<!-- 현재 페이지 URL을 쿼리 파라미터로 전달 -->
<a href="/logout?redirect={currentPageUrl}">로그아웃</a>
<!-- 또는 POST 폼에서 -->
<form action="/logout" method="post">
<input type="hidden" name="redirect" value="${currentPageUrl}">
<button type="submit">로그아웃</button>
</form>
그리고 스프링 컨트롤러에서는 이 파라미터를 사용하여 리다이렉트할 수 있습니다:
javaCopy code@PostMapping("/logout")
public String handleLogout(@RequestParam("redirect") String redirectUrl) {
// 로그아웃 처리 로직
return "redirect:" + redirectUrl;
}
리퍼러를 사용하는 방법은 구현이 간단하지만, 사용자의 설정에 따라 작동하지 않을 수 있습니다. 반면, URL을 명시적으로 전달하는 방법은 더 신뢰할 수 있으며, 어떠한 사용자 설정에도 영향을 받지 않습니다.
감사합니다.
2024. 05. 11. 19:39
감사합니다 영한님! 많은 도움이 되었습니다 🙂 좋은 주말 보내세요