사용자 관리
3.1. 스프링 시큐리티의 인증 구현
스프링 시큐리티의 인증 흐름
AuthenticationFilter가 요청을 가로챈다.
AuthenticationManager에 위임한다.
AuthenticationManager는 AuthenticationProvider를 이용해 인증 논리를 구현한다.
AuthenticationProvider는 사용자 이름과 암호를 확인하기 위해 UserDetailsService, PasswordEncoder를 이용한다.
사용자 관리에는 UserDetailsService, UserDetailsManager를 사용한다.
UserDetailsService
사용자 이름으로 사용자를 검색한다.
UserDetailsManager
사용자 추가, 수정, 삭제 작업을 한다.
둘은 인터페이스 분리 원칙을 지켜 필요없는 동작은 구현하지 않아도 된다.
UserDetails
UserDetailsService, UserDetailsManager에 사용자를 나타내는 방법
GrantedAuthority 인터페이스로 권한을 나타낸다.
유저는 하나 이상의 권한을 가진다.
3.2. 사용자 기술하기
스프링 시큐리티에서 사용자 정의는 UserDetails 계약을 준수해야 한다.
3.2.1. UserDetails 계약의 정의 이해하기
getUsername()
getPassword()
getAuthorities()
isAccountNotExpired()
계정 만료
isAccountNonLocked()
계정 잠금
isCredentialsNonExpired()
자격 증명 만료
isEnabled()
계정 비활성화
아래의 4개 메서드는 구현할 필요가 없다면 단순하게 true를 반환하면 된다.
3.2.2. GrantedAuthority 계약 살펴보기
GrantedAuthority.getAuthority()로 권한을 확인한다.
SimpleGrantedAuthority로 권한을 생성할 수 있다.
3.2.3. 최소한의 UserDetails 구현 작성
3.2.4. 빌더를 이용해 UserDetails 형식의 인스턴스 만들기
3.2.5. 사용자와 연관된 여러 책임 결합
JPA 사용을 담당하는 엔티티 User와 UserDetails를 구현한 User는 분리해서 구현한다.
3.3. 스프링 시큐리티가 사용자를 관리하는 방법 지정
3.3.1. UserDetailsService 계약의 이해
loadUserByUsername()
사용자 이름을 가진 사용자의 세부 정보를 얻는다.
존재하지 않으면 UsernameNotFoundException
3.3.2. UserDetailsService 계약 구현
InMemoryUserDetailsManager
JdbcUserDetailsManager
LdapUserDetailsManager
Last updated
Was this helpful?