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