- RememberMeAuthenticationFilter 란 -
스프링 시큐리티에서는 RememberMe라는 기능을 지원해준다.
이 RememberMe라는 기능은 세션이 만료된 뒤에도 서버에서 클라이언트의 인증 값을 기억하고 있어 주는 기능이다.
보통 cookie에 Remember Me 기능을 해줄 수 있는 특정한 쿠키 키-값을 세팅해서 구현을 한다.
이 복잡한 과정을 시큐리티에서는 간단한 설정으로 제공을 해주며 해당 기능을 사용하기 위해서는 해당 기능을 아래와 같은 형태로 활성화시켜야 한다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin();
http.rememberMe();
}
위와 같이 RememberMe 기능을 활성화시키면 기본적으로 RememberMeConfigurer 클래스가 생성이 되며 init 메서드를 통해 초기화가 된다.
public void init(H http) throws Exception {
this.validateInput();
String key = this.getKey();
RememberMeServices rememberMeServices = this.getRememberMeServices(http, key);
http.setSharedObject(RememberMeServices.class, rememberMeServices);
LogoutConfigurer<H> logoutConfigurer = (LogoutConfigurer)http.getConfigurer(LogoutConfigurer.class);
if (logoutConfigurer != null && this.logoutHandler != null) {
logoutConfigurer.addLogoutHandler(this.logoutHandler);
}
RememberMeAuthenticationProvider authenticationProvider = new RememberMeAuthenticationProvider(key);
authenticationProvider = (RememberMeAuthenticationProvider)this.postProcess(authenticationProvider);
http.authenticationProvider(authenticationProvider);
this.initDefaultLoginFilter(http);
}
RememberMe 기능을 구현하는 방법에는 Token 기반의 구현 방법과 DB 기반의 구현 방법이 있는데 Spring Security의 RememberMe 기능의 디폴트는 Token 기반의 기능 구현이다.
위의 init 메서드를 살펴보면 getRememberMeService에서 rememberMe 를 위한 Repository 객체가 없다면 토큰 기반의 TokenBasedRememberMeServices를 불러오게 되고 Repository가 있다면 DB 기반의 PersistentTokenBasedRememberMeServices를 생성 후 불러오게 된다.
RememberMe 기능은 기본으로 등록되는 기능이 아니기에 init 함수를 사용하면 해당 필터의 기능을 사용할 준비만 되어 있을 뿐 아직 해당 필터를 사용하겠다는 것은 아니다. 따라서 configure 메서드가 호출될 때 필터에 추가가 된다.
public void configure(H http) {
RememberMeAuthenticationFilter rememberMeFilter = new RememberMeAuthenticationFilter((AuthenticationManager)http.getSharedObject(AuthenticationManager.class), this.rememberMeServices);
if (this.authenticationSuccessHandler != null) {
rememberMeFilter.setAuthenticationSuccessHandler(this.authenticationSuccessHandler);
}
rememberMeFilter = (RememberMeAuthenticationFilter)this.postProcess(rememberMeFilter);
http.addFilter(rememberMeFilter);
}
RememberMe 기능을 사용자가 사용해서 로그인을 하게 되면 AbstractRememberMeServices를 상속받은 TokenBasedRememberMeServices 혹은 PersistentTokenBasedRememberMeServices에서는 autoLogin 메서드를 사용하여 로그인 프로세스를 진행한다. 해당 과정에서 RememberMe 기능을 위해 세팅해둔 특정한 쿠키 키-값을 사용해 인증 권한을 가져온다.
'Spring > spring security' 카테고리의 다른 글
Spring Security - AnonymousAuthenticationFilter란 (0) | 2021.09.11 |
---|---|
Spring Security - LogoutFilter 란 (0) | 2021.09.10 |
Spring Security - UsernamePasswordAuthenticationFilter 란 (1) | 2021.09.09 |
Spring Security UserDetails, UserDetailsService 란? - 삽질중인 개발자 (0) | 2021.02.14 |
spring security DB를 이용한 로그인 구현 3 ( 로그아웃 하기 ) - 삽질중인 개발자 (0) | 2020.03.29 |