작성
·
274
6
답변 2
7
네
CustomAuthenticationProvider 와 CustomUserDetailsService 는 서로 역할이 나누어 져 있습니다.
CustomAuthenticationProvider 클래스는 authenticate(Authentication) 메소드가 있습니다.
메소드명에서 알수 있듯이 인증처리 기능을 전체적으로 담당한다고 할 수 있습니다.
즉 CustomAuthenticationProvider 는 실제 사용자의 인증 처리를 위한 비즈니스 로직을 구현하는 곳입니다.
반면 CustomUserDetailsService 에는 loadByUsername(String username) 메소드가 있는데 즉 인증을 시도하는 사용자의 id 값을 가지고 현재 시스템 계정에 존재하는지를 검증하는 비즈니스 로직을 구현하는 곳입니다.
그리고 CustomAuthenticationProvider 는 CustomUserDetailsService 를 참조해서 사용자의 계정이 존재하는지를 확인하고 있습니다.
그렇기 때문에 두 클래스의 역할이 다른 것이고 CustomUserDetailsService 만으로 도 인증이 가능했지만 스프링 시큐리티에서는 내부적으로 DaoAuthenticationProvider 클래스가 우리가 만든 CustomUserDetailsService 를 호출해서 인증처리를 하고 있고 비밀번호 체크를 하고 있습니다.
결론적으로는 CustomAuthenticationProvider 와 CustomUserDetailsService 를 직접 모두 구현하거나
또는 CustomUserDetailsService 만 구현해도 AuthenticationProvider 와 UserDetailsService 클래스들은 모두 사용되고 있다고 보시면 됩니다.
0