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