SPRING/스프링 시큐리티
remember-me
JUMP개발자
2021. 8. 1. 17:24
1. 세션이 만료되고 브라우저가 종료된 후에도 어플리케이션이 사용자를 기억하는 기능
2. Remember-Me 쿠키에 대한 Http 요청을 확인한 후 토큰 기반 인증을 사용해 유효성을 검사하고 토큰이 검증되면 사용자는 로그인이 됨.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsService userDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
// 모든 리소스에 대한 인증완료시 접근 허용
http
.authorizeRequests()
.anyRequest().authenticated();
// form Login 사용
http
.formLogin();
// LogOut
http
.logout() // 로그아웃 처리
.logoutUrl("/logout") // 로그아웃 처리 URL
.logoutSuccessUrl("/login") // 로그아웃 성공 후 이동페이지
.addLogoutHandler(new LogoutHandler() { // 로그아웃 후 쿠기 삭제
@Override
public void logout(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) {
HttpSession session = httpServletRequest.getSession();
session.invalidate();
}
})
.logoutSuccessHandler(new LogoutSuccessHandler() { // 로그아웃 핸들러
@Override
public void onLogoutSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
httpServletResponse.sendRedirect("/login");
}
})
.and()
.rememberMe()
.rememberMeParameter("remember") // 기본 파라미터명은 remember-me
.tokenValiditySeconds(3600) // Default는 14일
.userDetailsService(userDetailsService); // 리멤버 미 기능이 활성화되지 않아도 항상 실행
}
}
로그인 화면
로그인 후 쿠키를 보면 아래와 같이 JSESSIONID 외에 remember-me가 생긴 것을 볼 수 있다.
JSESSIONID의 Value를 제거해도 remember-me가 있기 때문에 로그인 상태가 유지된다.
rememberMeParameter의 name