[ 웹개발 ] 로그인 후 상세페이지로 이동(session)
상황
아래는 안내메일 양식이다. 티켓상세보기 버튼을 눌렀을때 로그인이 되어있다면 정상적으로 상세페이지로 이동하나
미로그인 시 로그인을 다시 해도 메인페이지로가고, 상세페이지로는 이동이 안되는 점이다.
😊세션을 이용한 리다이렉트 처리😊
1️⃣ SessionInterCeptor.java > preHandle에서 세션에 리다이렉트 URL 저장
❓ redirect파라미터는 이미 인터셉터(세션)에 설정해놨으니, 편하게 갖다써~
로그인되지 않은 경우, redirect 파라미터를 세션에 저장하고 로그인 페이지로 리다이렉트
( http://yourdomain.com/ticketView?id=123&redirect=/ticketView?id=12 )
2️⃣ LoginController.java 에서 세션값 확인 후 리다이렉트 진행
@PostMapping(value = {"/login"})
public String login(...... 생략 ......)
{
...... 생략 ......
// 세션에서 리다이렉트 URL 가져오기
String redirectUrl = (String) session.getAttribute("redirectUrl");
// 리다이렉트 URL이 있으면 해당 페이지로 이동, 없으면 기본 메인 페이지로 이동
if (redirectUrl != null && !redirectUrl.isEmpty()) {
session.removeAttribute("redirectUrl"); // 리다이렉트 후 세션에서 URL 제거
return "redirect:" + redirectUrl; // 리다이렉트 URL로 이동
}
// 리다이렉트 URL이 없다면 기본 메인 페이지로 이동
return "redirect:/main";
}
⭐ (실패) 시도
1️⃣ 이메일 발송 후 버튼 클릭
이메일의 버튼 링크에 redirect 파라미터를 포함하여 발송.
예: http://yourdomain.com/ticketView?id=123&redirect=/ticketView?id=123
2️⃣ 사용자가 티켓 상세 페이지로 접근
SessionInterceptor에서 로그인 상태를 확인하고, 로그인되지 않은 경우 로그인 페이지로 리다이렉트
3️⃣ 로그인 페이지
사용자 로그인 성공 시 redirect 파라미터를 사용해 원래 요청된 URL로 리다이렉트
4️⃣ 티켓 상세 페이지 표시
로그인 상태가 유지되므로 티켓 상세 정보를 렌더링
😭실패 이유
response.sendRedirect("/login?redirect=" + URLEncoder.encode(redirectUrl, StandardCharsets.UTF_8.name()));
위 리다이렉트 방식은 GET 방식이다.
일반적인 로그인은 POST로 값을 넘기기에 로그인페이지에 redirectUrl파라미터를 넘기는게 불가능 했었다.
그래서... 빠르게 session에 값 저장하는것으로 변경!
➕기존 GET방식은 위험해.. 세션으로 돌리자