본문 바로가기

카테고리 없음

[스프링 시큐리티] 기본 API & Filter 이해(3) UsernamePasswordAuthenticationFilter

UsernamePasswordAuthenticationFilter

  1. 사용자가 인증을 시도한다.
  2. UsernamePasswordAuthenticationFilter 필터가 요청을 받는다.
  3. AntPathRequestMatcher(/login) 에서 요청 URL 을 체크한다.
    1. 사용자 정의 보안 클래스에서 설정할 수 있다.
    http.loginProcessingUrl("/login")
    
  4. 매칭이 되면 인증 처리를 진행하고, URL 이 일치하지 않으면 인증 처리 없이 다른 필터로 넘어간다.
  5. UsernamePasswordAuthenticationFilter 는 Authentication 인증 객체를 생성해서 사용자가 입력한 username&password 정보를 저장한다.
  6. 이 인증 객체에 대한 처리를 AuthenticationManager 에게 맡긴다.
  7. AuthenticationManager 은 내부적으로 AuthenticationProvider 타입의 객체들을 가지고 있는데 그 중에 하나를 선택해서 인증 처리를 위임하게 된다.
  8. AuthenticationProvider 가 실질적인 인증 처리를 담당하게 된다.
  9. 인증에 실패하게 되면 인증예외를 발생시켜 필터에게 주게 되고 후속 작업이 처리된다.
  10. 인증에 성공하게 되면 Authentication 이란 객체를 만들어 유저 정보와 권한 정보를 저장하여 AuthenticationManager 에게 전달한다.
  11. AuthenticationManager 은 이 인증 객체를 UsernamePasswordAuthenticationFilter필터에게 전달한다.
  12. UsernamePasswordAuthenticationFilter 필터는 이 인증 객체를 SecurityContext (인증객체를 저장하는 보관소) 에 저장한다. 이 SecurityContext 는 추후 세션에 저장된다.
  13. 인증이 완료되면 successHandler 에서 인증 완료 후 작업을 처리한다.