스프링 시큐리티는 ①메모리상에서 처리 ,②데이터베이스 이용하여 간단한 설정만으로 구현이 가능하다.
<security:remember-me>
태그를 이용하여 설정한다.
1. remember-me 태그의 속성들
2. 데이터베이스를 이용하여 자동로그인 처리하기
①지정된 테이블과 지정된 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
);
security-context.xml 에 설정 추가하기
데이터소스만 지정해 주면 된다. ( <security:remember-me data-source-ref="dataSource" token-validity-seconds="604800"/>
)
<security:http>
<security:intercept-url pattern="/sample/all" access="permitAll"/>
<security:intercept-url pattern="/sample/member" access="hasRole('ROLE_MEMBER')"/>
<security:intercept-url pattern="/sample/admin" access="hasRole('ROLE_ADMIN')"/>
<security:form-login login-page="/customLogin" authentication-success-handler-ref="customLoginSuccessHandler"/>
<security:logout logout-url="/customLogout" invalidate-session="true" delete-cookies="remember-me, JSESSIONID" success-handler-ref="customLogoutSuccessHandler"/>
<!-- 여기 -->
<security:remember-me data-source-ref="dataSource" token-validity-seconds="604800"/>
<security:access-denied-handler ref="customAccessDenied"/>
</security:http>
로그아웃 시, 쿠키 제거하기
security-context.xml 의 <security:logout>태그에 delete-cookies
속성을 추가한다.
<security:http>
<security:intercept-url pattern="/sample/all" access="permitAll"/>
<security:intercept-url pattern="/sample/member" access="hasRole('ROLE_MEMBER')"/>
<security:intercept-url pattern="/sample/admin" access="hasRole('ROLE_ADMIN')"/>
<security:form-login login-page="/customLogin" authentication-success-handler-ref="customLoginSuccessHandler"/>
<!-- 여기 -->
<security:logout logout-url="/customLogout" invalidate-session="true" delete-cookies="remember-me, JSESSIONID" success-handler-ref="customLogoutSuccessHandler"/>
<security:remember-me data-source-ref="dataSource" token-validity-seconds="604800"/>
<security:access-denied-handler ref="customAccessDenied"/>
</security:http>