java, spring

[Spring] 자동 로그인(remember-me)

isaac.kim 2021. 10. 4. 12:38
728x90
반응형

[Spring] 자동 로그인(remember-me)

 

도움이 되셨다면 광고 한 번 클릭 부탁드립니다. 한 번의 클릭이 제게 큰 힘이 된답니다!^^

 

자동 로그인(remember-me) 구현

 

반응형

 

스프링 시큐리티는 'remember-me' 기능을 메모리상에서 처리하거나, 데이터베이스를 이용하는 형태로 약간의 설정만으로 구현이 가능합니다. security-context.xml에는 <security:remember-me> 태그를 이용해서 기능을 구현합니다. <security:remember-me>에는 아래와 같이 여러 속성 값을 지정할 수 있습니다. 여러 속성 중에서 주로 사용되는 속성은 다음과 같습니다.

 

- key : 쿠키에 사용되는 값을 암호화하기 위한 키(key)값

- data-source-ref : DataSource를 지정하고 테이블을 이용해서 기존 로그인 정보를 기록(옵션)

- remember-me-cookie : 브라우저에 보관되는 쿠키의 이름을 지정합니다. 기본값은 'remember-me'입니다.

- remember-me-parameter : 웹 화면에서 로그인할 때 'remember-me'는 대부분 체크박스를 이용해서 처리합니다. 이때 체크박스 태그는 name 속성을 의미합니다.

- token-validity-seconds : 쿠키의 유효시간을 지정합니다.

 

 

데이터베이스를 이용하는 자동 로그인

 

자동 로그인 기능을 처리하는 방식 중 가장 많이 사용되는 방식은 로그인이 되었던 정보를 데이터베이스를 이용해서 기록해 두었다가 사용자의 재방문 시 세션에 정보가 없으면 데이터베이스를 조회해서 사용하는 방식입니다. 서버의 메모리상에만 데이터를 저장하는 방식보다 좋은 점은 데이터베이스에 정보가 공유되기 때문에 좀 더 안정적으로 운영이 가능하다는 점입니다.

 

스프링 시큐리티에서 'remember-me' 기능 역시 JDBC를 이용하는 경우처럼 지정된 이름의 테이블을 생성하면 지정된 SQL문이 실행되면서 이를 처리하는 방식과 직접 구현하는 방식이 있습니다. 생성된 테이블은 로그인을 유지하는데 필요한 정보를 보관하는 용도일 뿐이므로, 커스터마이징 하기보다는 지정된 형식의 테이블을 생성합니다.

 

Spring Security의 공식 문서에 나오는 로그인 정보를 유지하는 테이블

 - 다른 DB의 경우에도 테이블 이름과 칼럼 이름만 맞춰서 사용하면 됩니다.

 

테이블 명 : persistence_logins

 

자동 로그인에서 DB를 이용하는 설정은 별도의 설정 없이 data-source-ref 만 지정하면 됩니다.

 

security-context.xml의 일부

 

로그인 화면에 자동 로그인 설정

자동 로그인은 로그인 화면에서 선택해서 처리되므로, 체크박스의 형태로 구현하고 <input> 태그의 name 속성 값은 'remember-me'입니다.

customLogin.jsp의 일부

 

프로젝트를 실행하고 'Remember-me'를 체크한 후 로그인을 하면 브라우저에서 쿠키를 조사해 보면 자동으로 'remember-me'라는 이름의 쿠키가 생긴 것을 확인할 수 있습니다.

데이터베이스의 'persistent_logins' 테이블에도 사용자가 로그인한 정보가 남아 있는 것을 볼 수 있습니다.

 

'remember-me' 이름으로 생성된 쿠키는 유효기간이 있으므로, 사용자는 브라우저를 완전히 종료한 후에 다시 '/sample/admin'과 같이 로그인이 필요한 페이지에 접근해보면 정상적으로 로그인되는 것을 확인할 수 있습니다.

 

브라우저를 종료한 후 '/sample/admin'을 호출했을 때 브라우저가 보내는 정보를 확인해 보면 'remember-me' 쿠키의 정보가 전송되는 것을 볼 수 있습니다. 

 

브라우저 > 개발자 도구 > Network > Headers > Request Headers

 


로그아웃 시 쿠키 삭제

자동 로그인 기능을 이용하는 경우에 사용자가 로그아웃을 하면 자동 로그인에 사용하는 쿠키도 삭제해 주도록 쿠키를 삭제하는 항목을 security-context.xml에 지정합니다.

 

별도의 설정이 없었다면 자동 로그인에서 사용한 쿠키의 이름은 'remember-me'였을 것이고, Tomcat을 통해서 실행되고 있었다면 WAS가 발행하는 쿠키의 이름은 JSESSION_ID입니다. Tomcat 등이 발행하는 쿠키는 굳이 지정할 필요가 없지만 관련된 모든 쿠키를 같이 삭제하도록 해 주는 것이 좋습니다.


오늘은 스프링 시큐리티를 활용한 '자동 로그인'에 대해 알아보았습니다.

 

도움이 되셨다면 광고 한 번 클릭 부탁드립니다. 한 번의 클릭이 제게 큰 힘이 된답니다!^^
728x90
반응형