Spring Security - 정수원 2일차

5. 인증 API - Logout, LogoutFilter

  1. request(/logout) 보내면
  2. Server에서는 세션 무효화, 인증토큰 삭제, 쿠키정보 삭제, 로그인 페이지로 리다이렉트 해줌
@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().authenticated();
        http
                .formLogin();

        http
                .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login")
                .addLogoutHandler(new LogoutHandler() {
                    @Override
                    public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
                        HttpSession session = request.getSession();
                        session.invalidate();
                    }
                })
                .logoutSuccessHandler(new LogoutSuccessHandler() {
                    @Override
                    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
                        response.sendRedirect("/login");
                    }
                })
                .deleteCookies("remember-me");
    }
  • LogoutFilter → AntPathRequestMatcher(/logout) 실패시 chain.doFilter → Authentication → SecurityContext → SecurityContextLogoutHandler
  • 마지막 Handler 에서 세션무효화 ,쿠키 삭제, SecurityContextHandler.clearContext()

6. 인증 API - Remember Me 인증

  1. 세션이 만료되고 웹 브라우저가 종료된 후에도 어플리케이션이 사용자를 기억하는 기능
  2. Remember-Me 쿠키에 대한 Http 요청을 확인한 후 토큰 기반 인증을 사용해 유효성을 검사하고 토큰이 검증되면 사용자는 로그인 된다.
  3. 사용자 라이플 사이클
    • 인증 성공(Remember-Me쿠키 설정)
    • 인증 실패(쿠키가 존재하면 쿠키 무효화)
    • 로그아웃(쿠키가 졵하면 쿠키 무효화)
.rememberMe()
.rememberMeParameter("remember") // 기본 파라미터명은 remember-me
.tokenValiditySeconds(3600) // Default는 14일
.userDetailsService(userDetailsService); 

7. 인증 API - RememberMeAuthenticationFilter

  1. 인증 객체가 없는경우
  2. remember-me 쿠키를 가지고 있는 경우
  3. jsession 쿠키가 없고 remember-me 쿠키가 있을 경우 발동
  • TokenBasedRememberMeServices : 유효기간 설정해서 가지고있음
  • PersistenTokenBasedRememberMeServices : DB에 저장하여 가지고있음

좋은 웹페이지 즐겨찾기