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을 기준으로 데이터가 삭제됩니다.

 

 

+ Recent posts