이번 포스트에서는 RememberMe 서비스에 대해 살펴보자.
Remember-Me 처리
Remember-Me는 로그인 정보를 쿠키에 저장해 두었다가 나중에 사용하는 기법이다. 쿠키를 안전하게 사용하려면 암호화해야 하고 로그아웃 할 때 쿠키 삭제 등 관리가 필요한데 Spring Security에서는 이 과정을 아주 단순히 처리할 수 있다.
Remember-Me 기능을 이용하기 위해서는 화면단에 단지 remember-me라는 이름의 checkbox가 추가되면 된다.
{{^SPRING_SECURITY_CONTEXT}}
<form action="/login" method="post">
{{>include/csrf}} <!-- csrf 토큰을 위한 히든 input 필드 -->
<label for="username">아이디:</label>
<input type="text" id="username" name="username" required />
<label for="password">비밀번호:</label>
<input type="password" id="password" name="password" required />
<label for="remember-me">로그인 유지:</label>
<input type="checkbox" id="remember-me" name="remember-me" />
<button type="submit">로그인</button>
</form>
{{/SPRING_SECURITY_CONTEXT}}
HttpSecurity 설정
RememberMe 기능 역시 login, logout 처럼 HttpSecurity#rememberMe()에 RememberMeConfigure를 커스터마이징해서 사용한다.
메서드명 |
설명 |
기본 값 |
rememberMeParameter |
체크박스의 name 속성 |
remember-me |
rememberMeCookieDomain() |
사용할 도메인을 설정한다. |
프로젝트 도메인 |
rememberMeCookieName() |
저장될 쿠키의 이름을 설정한다. |
remember-me |
tokenValiditySecond() |
쿠키 유지 기간(초단위) |
2주 = 86400 |
useSecureCookie() |
https에서만 사용할 것인지 설정 |
false |
대부분 기본 값을 쓰면 될것 같다. 다음은 remember-me를 사용하면서 유지기간을 1분으로 설정한 예이다.
http.rememberMe(rememberMe -> rememberMe.tokenValiditySeconds(60)); // 1분 테스트용
동작 확인
이제 login에 성공하면 remember-me라는 이름으로 쿠키가 설치되는 것을 확인할 수 있다.
브라우저를 닫은 후 다시 localhost:8080/admin 페이지를 요청하면 당분간은 login 폼으로 진행하지 않고 바로 admin 페이지가 서비스 된다.
이 상황에서 로그아웃을 하면 자동으로 쿠키를 삭제해주고 로그인 유지도 해제된다.