create table persistent_logins(
username varchar(64) not null,
series varchar(64) primary key,
token varchar(64) not null,
last_used timestamp not null
);
remember-me 기능의 설정은 쿠키를 발행하도록 securityConfig의 내용을 수정해서 처리할 수 있습니다.
이때 쿠키와 관련된 정보를 테이블로 보관하도록 지정하는데 datasource가 필요하고
userdetailsService타입의 객체가 필요합니다.
private final DataSource dataSource;
private final CustomUserDetailsService userDetailsService;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http.formLogin().loginPage("/member/login");
http.csrf().disable();
http.rememberMe()
.key("2348973")
.tokenRepository(persistentTokenRepository())
.userDetailsService(userDetailsService)
.tokenValiditySeconds(60*60*24*30);
return http.build();
}
@Bean
public PersistentTokenRepository persistentTokenRepository() {
JdbcTokenRepositoryImpl repo = new JdbcTokenRepositoryImpl();
repo.setDataSource(dataSource);
return repo;
}
<div class="form-check">
<input class="form-check-input" type="checkbox" id="remember-me" name="remember-me" checked/>
<label class="form-check-label" for="remember-me"> Remember me </label>
</div>
remember-me 라는 name값이 전달외어야 합니다.
쿠키 생성확인
JSESSIONID 쿠키만 삭제해도 데이터베이스에서 persistent_logins 조회하면 해당 유저의 쿠키가 유지됩니다.
로그아웃의 경우 기본 설정은 remember-me 쿠키의 삭제입니다
데이터베이스역시 로그아웃이 되면 persistent_logins 테이블에 username을 기준으로 데이터가 삭제됩니다.