2019. 10. 12. 08:00ㆍProject B (SPMS)/Project B 파트7
자동 로그인 (remember-me)
최근의 웹페이지들은 자동 로그인 이나 로그인 기억하기 라는 이름으로 한 번 로그인하면 일정 시간동안 다시 로그인을 안해도 되는 기능을 갖고 있다.
이 기능은 거의 대부분 쿠키(Cookie)를 이용해서 구현된다.
스프링 시큐리티의 경우 remember-me 기능을 메모리상에서 처리하거나, 데이터베이스를 이용하는 형태로 약간의 설정만으로 구현이 가능하다.
시큐리티 자동 로그인 속성은 다음과 같다
key : 쿠키에 사용되는 값을 암호화하기 위한 키 값
data-source-ref : 데이터소스를 지정하고 테이블을 이용해서 기존 로그인 정보를 기록
remember-me-cookie : 브라우저에 보관되는 쿠키의 이름을 지정한다. 기본값은 remember-me 이다.
remember-me-parameter : 웹 화면에서 로그인할 때 remember-me는 대부분 체크박스를 이용해서 처리한다.
token-vallidity-seconds : 쿠키의 유효시간을 지정한다.
데이터베이스를 이용하는 자동 로그인
자동 로그인 기능을 처리하는 방식 중에서 제일 많이 사용하는 방식은 로그인이 됐던 정보를 데이터베이스에 기록해놓았다가 사용자의 재방문 시 세션에 정보가 없으면 데이터베이스를 조회해서 사용하는 방식이다.
서버의 메모리상에만 데이터를 저장하는 방식보다 좋은 점은 데이터베이스에 정보가 공유되기 때문에 좀 더 안정적으로 운영이 가능하다는 점이다.
스프링 시큐리티에서 remember-me 기능 역시 JDBC를 이용하는 경우처럼 지정된 이름의 테이블을 생성하면 지정된 SQL문이 실행되면서 이를 처리하는 방식과 직접 구현하는 방식이 있다.
생성된 테이블은 로그인을 유지하는데 필요한 정보를 보관하는 용도일 뿐이므로, 커스터마이징하기보다는 지정된 형식의 테이블을 생성한다.
테이블 생성
CREATE TABLE persistent_logins(
username varchar(64) NOT NULL,
series varchar(64) PRIMARY KEY,
token varchar(64) NOT NULL,
last_used timestamp NOT NULL
);
스프링 시큐리티 공식문서에 나오는 로그인 정보를 유지하는 테이블로 고정되어 있다.
테이블 생성문은 특정 데이터베이스에 맞게 테이블명과 컬럼명을 제외한 컬럼 타입등을 적당히 조정해서 사용하면 된다.
오라클에서는 varchar 그대로 이용하거나 varchar2로 변경해서 쓰면 된다.
자동 로그인에서 데이터베이스를 이용하는 설정은 SecurityConfig.java의 loginSuccessHandler() 를 지정하면 된다.
우리는 이미 처리한 상태이다.
로그인 화면에 자동 로그인 설정
자동로그인은 로그인 화면에서 선택해서 처리되므로, 체크박스의 형태로 구현하고 <input> 태그의 name 속성값은 remember-me 이다.
프로젝트를 실행하고 Remember-me 를 체크한 후 브라우저에서 쿠키를 조사해보면 자동으로 remember-me 라는 이름의 쿠키가 생긴 것을 확인할 수 있다.
데이터베이스의 persistence_logins 테이블에도 사용자가 로그인한 정보가 남아있는 것을 알 수 있다.
remember-me 이름으로 생성된 쿠키는 유효기간이 있으므로, 사용자는 브라우저를 완전히 종료한 후에 다시 로그인 페이지에 접근해도 로그인 되는 것을 알 수 있다.
로그아웃 시 쿠키 삭제
자동 로그인을 이용하는 경우에 사용자가 로그아웃을 하면 기존과 달리 자동 로그인에 사용하는 쿠키도 삭제해주도록 쿠키를 삭제하는 항목을 지정한다.
SecurityConfig.java 의 아래 부분
http.logout()
.logoutUrl("/customLogout")
.invalidateHttpSession(true)
.deleteCookies("remember-me","JSESSION_ID");
별도의 설정이 없었다면 자동 로그인에서 사용한 쿠키의 이름은 remember-me 였을 것이고, 톰캣을 통해 실행되고 있었다면 WAS가 발행하는 쿠키이름은 JSESSION_ID 이다.
톰캣 등이 발행하는 쿠키는 굳이 지정할 필요가 없지만 관련 모든 쿠키를 같이 삭제해주는게 좋다.
로그아웃하면 데이터베이스에서도 쿠키 삭제가 됨을 알 수 있다.
'Project B (SPMS) > Project B 파트7' 카테고리의 다른 글
[B -2-62] 스프링 시큐리티 9 (0) | 2019.10.12 |
---|---|
[B -2-60] 스프링 시큐리티 7 (0) | 2019.10.12 |
[B -2-59] 스프링 시큐리티 6 (0) | 2019.10.12 |
[B -2-58] 스프링 시큐리티 5 (0) | 2019.10.12 |
[B -2-57] 스프링 시큐리티 4 (0) | 2019.10.11 |