
실질적으로 인증을 수행하는 클래스
사용자의 아이디와 패스워드를 검증하는 클래스입니다.
AuthenticationManager가 최적의 AuthenticationProvider를 선택하면
AuthenticationProvider는 인증을 수행한다.
AuthenticationProvider(인터페이스 클래스) -- 실정에 맞게 구현하여 사용하는 경우가 많다
두 개의 메서드를 제공한다
2-1 authenticate : 실제적인 인증 검증
2-2 supports : 폼인증, 리멤버미 인증같은 조건을 처리할 수 있는지 검사
authenticate 메소드 안에 ID/PASSWORD를 가지고 있다.
3-1 ID검증, PASSWORD검증, 추가 검증 모두 수행한다
ID 검증 -> UserdetailsService 클래스(인터페이스)에서 데이터 계층으로부터 사용자의 계정이 있는지 없는지 확인 후 있으면 UserDetails 타입으로 user객체를 변환해서 AuthenticationProvider에게 반환한다.
Password 검증 -> UserDetails 타입의 유저 객체에는 사용자의 계정 패스워드가 있다, 로그인시 입력한 패스워드를 비교한다.
추가 검증까지 모두 끝나면 인증객체를 생성하고 인증에 성공한 유저 객체, 권한정보를 인증 객체에 저장해서 AuthenticationManager에게 전달한다.
이렇게 되면 AuthenticationProvider 의 역할은 끝난다
Filter -> AuthenticationManager -> AuthenticationProvider -> 아이디검증 -> 인증객체 생성 -> AuthenticationManager -> Filter -> SecurityContext 저장