인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

hykim001kr님의 프로필 이미지
hykim001kr

작성한 질문수

스프링 시큐리티

5) DB 연동 인증 처리(2) : CustomAuthenticationProvider

CustomAuthenticationProvider 질문입니다.

작성

·

274

6

안녕하세요.
 
이번 강의를 들으면서 질문하고자 하는 내용은 바로 앞 강의 CustomUserDetailsService 구현만으로 로그인이 정상적으로 되는지 안 되는지 체크를 해 주었는데, 이번 강의에서는 CustomAuthenticationProvider 를 사용해서 입력 비밀번호와 디비 저장 비번을 matches 로 비교를 직접하셨는데요.
 
기능적으로 두 강의의 차이를 모르겠어요.
 
그럼 실제 사이트에서 로그인 로직을 만들때는 CustomUserDetailsService, CustomAuthenticationProvider 모두를 구현해 줘야 하는건가요?
 
감사합니다. ^.^
 

답변 2

7

정수원님의 프로필 이미지
정수원
지식공유자

CustomAuthenticationProvider 와 CustomUserDetailsService 는 서로 역할이 나누어 져 있습니다.

CustomAuthenticationProvider 클래스는 authenticate(Authentication) 메소드가 있습니다.

메소드명에서 알수 있듯이 인증처리 기능을 전체적으로 담당한다고 할 수 있습니다.

즉 CustomAuthenticationProvider 는 실제 사용자의 인증 처리를 위한  비즈니스 로직을 구현하는 곳입니다.

반면 CustomUserDetailsService 에는 loadByUsername(String username) 메소드가 있는데 즉 인증을 시도하는 사용자의 id 값을 가지고 현재 시스템 계정에 존재하는지를 검증하는 비즈니스 로직을 구현하는 곳입니다.

그리고 CustomAuthenticationProvider 는 CustomUserDetailsService 를 참조해서 사용자의 계정이 존재하는지를 확인하고 있습니다.

그렇기 때문에 두 클래스의 역할이 다른 것이고 CustomUserDetailsService 만으로 도 인증이 가능했지만 스프링 시큐리티에서는 내부적으로 DaoAuthenticationProvider 클래스가 우리가 만든 CustomUserDetailsService 를 호출해서 인증처리를 하고 있고 비밀번호 체크를 하고 있습니다.

결론적으로는 CustomAuthenticationProvider 와 CustomUserDetailsService 를 직접 모두 구현하거나 

또는 CustomUserDetailsService 만 구현해도 AuthenticationProvider 와 UserDetailsService 클래스들은 모두 사용되고 있다고 보시면 됩니다.

0

hykim001kr님의 프로필 이미지
hykim001kr
질문자

그런 의미였군요 ^.^

감사합니다 ~~

hykim001kr님의 프로필 이미지
hykim001kr

작성한 질문수

질문하기