본문 바로가기

Language/Spring Security

사용자 상세 서비스 - UserDetailsService

시큐리티 인증 / 인가 흐름도

 

  • UserDetailsService
    • UserDetailsService의 주요 기능사용자와 관련된 상세 데이터를 로드하는 것이며 사용자의 신원, 권한, 자격 증명 등과 같은 정보를 포함 가능
      • DB와 같은 저장소로부터 유저 정보를 가져올 때 사용
        → 반드시 UserDetailsService를 사용해야하는 것은 아님
    • 이 인터페이스를 사용하는 클래스주로 AuthenticationProvider 이며 사용자가 시스템에 존재하는지 여부사용자 데이터를 검색하고 인증 과정 수행
    • UserDetailsService의 loadUserByUsername 메서드
      ⇒ 사용자의 이름으로 사용자 데이터를 검색하고, 해당 데이터를 UserDetails 객체로 반환

UserDetailsService 흐름도

  • Repository에서 DB에 접근하여 username에 맞는 사용자 정보를 가지고 와서 도메인 객체(엔티티 등)에 담음
  • 도메인 객체의 정보를 그대로 전달하는 것이 아니라 UserDetails 타입으로 변경해서 AuthenticationProvider에게 반환
  • 사용자 정보를 찾을 수 없을 경우 UserNotFoundException 발생

UserDetailsService 사용 방법

  • UserDetailsService만 커스터마이징할 경우 다음과 같이 적용
  • AuthenticationProvider 와 함께 커스트 마이징 할 경우 AuthenticationProvider 에 직접 주입해서 사용


추가 내용

  • UserDetailsService를 @Bean으로 하나만 정의할 경우 자동으로 커스텀한 UserDetailService 사용
    → 실질적으로 위의 사진처럼 http.userDetails(customUserDetailsServcie())와 같은 코드가 불 필요
  • 하지만, 빈으로 등록하지 않고 일반 객체로 사용할 경우 http.userDetailsService(new customUserDetailsService()) 코드 필수