실무/[ 기타 ]

[ 웹개발 ] 로그인 후 상세페이지로 이동(session)

glenn93 2024. 12. 26. 11:55
728x90
반응형

상황

아래는 안내메일 양식이다. 티켓상세보기 버튼을 눌렀을때 로그인이 되어있다면 정상적으로 상세페이지로 이동하나

미로그인 시 로그인을 다시 해도 메인페이지로가고,  상세페이지로는 이동이 안되는 점이다.

 

😊세션을 이용한 리다이렉트 처리😊

  

 

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방식은 위험해..  세션으로 돌리자

 

 

728x90
반응형