본문 바로가기
프로젝트/자리 있어요?

[Refactoring] 22.08.28. 로그인 & 로그아웃 redirection

by 규글 2022. 8. 28.

로그인 redirection

 현재 로그인을 하는 경우 home 페이지로 넘어가는 것으로 되어있다. 하지만, 다른 곳에 있다가 navigation bar의 로그인 버튼을 눌렀을 때도 home 으로 넘어간다. 이것은 실제 사용 면에서 상당히 불편한 것이다. 이는 logout에서도 사용했던 HttpServletRequest 객체의 getHeader method를 사용해볼 것이다. [각주:1]

 

코드 뜯어보기

loginform.jsp / UsersController - loginProcess

 로그인의 과정은 작성된 login form에서 ajax 요청을 통해서 Controller로 전달되어 service logic을 거쳐서 그 여부에 따라 front에서의 action이 달라진다. 현재는 로그인 성공 시 무조적인 home으로의 이동 요청을 하고 있다. 기존에 이 부분을 수정할 때 로그인 시 메인 페이지로의 요청을 홈으로 바꾼 것이었는데, 로그인 시 메인 화면을 보여주는 것이 더 좋은 것이 맞다는 생각을 하게 되었다. 따라서 일단 기본 이동 요청을 메인 페이지로 하되, 기존에 다른 곳에서의 이동 요청이 있었다면 해당 경로에 맞는 페이지로 redirection 할 수 있도록 수정해보려고 한다.

 

 

 

 로그인 페이지로의 이동 요청과 로그인 처리 요청은 서로 다른 것이다. 따라서 로그인 페이지로의 이동에서 이전 페이지의 정보를 받아서 넘겨주어야 한다. 때문에 로그인 페이지로의 이동 요청에서 redirection page의 정보를 받아 넘겨주고, 그렇게 로그인 페이지에서 받아 다시 넘겨주는 redirection page 경로에 'store' 혹은 'info'가 포함되어 있다면 기존 페이지로 이동시키고, 그것이 아니라면 검색 메인 페이지로 이동시키도록 변경했다.

 'store' 가 포함된 경로는 매장 관리 페이지와 매장 상세 페이지, 'info'가 포함된 경로는 마이 페이지, 'main'이 포함된 경로는 메인 페이지이다. 로그인이 필요하게 될 상황은 다음의 경우로 생각해볼 수 있다.

  1. 페이지에서 처음 로그인 요청을 할 때
  2. 비로그인으로 매장 검색 중에 로그인 할 때
  3. 매장 상세 페이지에서 비로그인 상태로 주문 시도를 할 때
  4. 로그인 후 이용 시간이 만료되어서 강제로 로그인 페이지로 이동했을 때

 

 4번 항목의 경우는 시간이 흘러 session이 만료되었을 때, 강제로 로그인 페이지로 redirect 시킬 생각으로 작성했다. 물론 이 사항은 3번에도 적용이 될 수 있겠다.

 

 

22.08.29. 문제 발생 해결

 Front쪽에 redirect query parameter로 주었던 redirect 가 '&' 의 존재로 오류를 일으키고 있었다. 즉 & 전까지를 redirect 라는 query의 data로 보고, keyword는 다른 query로 따로 인식하고 있던 것이었다.

 

 그래서 사용한 방법은 인코딩이었다. 처음 login form으로의 이동에서 URLEncoder로 인코딩을 해서 보냈다. 이를 다시 controller에서 받을 때는 자연히 디코딩이 된 상태로 받아지더라.

 

로그아웃 Redirection

 현재 로그아웃의 경우 마이 페이지에서만 메인 페이지로 redirect가 일어난다. 하지만 매장 관리 페이지에서의 로그아웃에서도 메인 페이지로의 redirect가 필요하다. 이를 위하여 매장 상세 페이지와 매장 관리 페이지들의 구분을 위해 store folder 하위에 manage folder를 새로 만들어주었다.

 그리고 그에 대한 요청 경로를 수정해주면서 매장 관리와 관련된 요청에 대한 controller의 method에서도 요청 경로를 수정해주었다. 이때 든 생각은 유일하게 리뷰와 관련된 내용은 수정할 수 없었는데, 그 이유는 매장 방문자와 관리자의 동작을 service에서는 구분했지만, 요청 경로는 동일하기 때문이다. 이러면 매장 관리 페이지에서 세션이 만료되었을 때의 동작에 대한 경로 요청만을 구분하려면 어떻게 해야 하는 것일까?

 

 기존에는 요청이 오기 전 경로에 'users' 만을 포함하도록 했다면, 이제는 manage까지 포함한 경우 메인 페이지로 redirect 시키면 되도록 수정했다.

댓글