(스프링) 컨트롤러에서 쿠키 사용하기

사용자의 편리함을 위해 아이디를 기억해 두었다가 다음에 로그인을 할 때 아이디를 자동으로 넣어주는 사이트가 많다. 이 기능을 구현할 때 쿠키를 사용한다.
여기서는 쿠키를 사용해서 이메일 기억하기 기능을 추가해보자.


이메일 기억하기 기능을 구현하는 방식은 다음과 같다.

  • 로그인 폼에 '이메일 기억하기'옵션을 추가한다.
  • 로그인 시에 '이메일 기억하기'옵션을 선택했으면, 로그인 성공 후 쿠키에 이메일을 저장한다. 이때 쿠키는 웹 브라우저를 닫더라도 삭제되지 않도록 유효시간을 길게 설정한다.
  • 이후, 로그인 폼을 보여줄 때 이메일을 저장한 쿠키가 존재하면 입력 폼에 이메일을 보여준다.


LoginCommand클래스에 rememberEmail필드를 추가했다.

이메일 기억하기 기능을 위해 추가해야 할 부분은 다음의 세 곳이다.
  • loginForm.jsp에 이메일 기억하기 선택 항목을 추가한다.
  • LoginController의 form()메소드에서 쿠키가 존재하는 경우 폼에 전달할 커맨드 객체의 email 프로퍼티를 쿠키의 값으로 설정한다.
  • LoginController의 submit()메소드에서, 이메일 기억하기 옵션을 선택한 경우 로그인 성공 후에 이메일을 담고 있는 쿠키를 생성한다.


@CookieValue애노테이션의 value속성은 쿠키의 이름을 지정한다. 이 경우는  이름이 REMEMBER인 쿠키를 Cookie타입으로 전달받게 된다. 지정한 이름을 가진 쿠키가 존재하지 않을 수도 있다면 required속성의 값을 false로 지정해주어야 한다. 
이 경우 이메일 기억하기를 선택하지 않을 수도 있기 때문에 required속성의 값을 false로 지정했다. 


REMEBER쿠키가 존재할 경우 쿠키의 값을 읽어와 커맨드 객체의 email프로퍼티 값을 설정한다. 커맨드 객체를 사용해서 폼을 출력하므로, REMEMBER쿠키가 존재하면 입력 폼의 email부분에 쿠키의 값이 채워져서 출력된ㄷ.

실제로 REMEMBER쿠키를 생성하는 부분은 로그인을 처리하는 submit()메소드이다.
쿠키를 생성하려면 HttpServletResponse객체가 필요하므로, submit()메소드의 파라미터로 HttpServletResponse 타입을 추가해 주어야 한다.



로그인에 성공하면 이메일 기억하기를 선택했는지 여부 if(loginCommand.isRememberEmail())에 따라 30일동안 유지되는 쿠키를 생성하거나 바로 삭제되는 쿠키를 생성한다.


댓글

이 블로그의 인기 게시물

(18장) WebSocekt과 STOMP를 사용하여 메시징하기

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬