개발하는 자몽

[Spring Security] UserDetails, UserDetailsService 본문

Java/Spring

[Spring Security] UserDetails, UserDetailsService

jaamong 2023. 1. 3. 09:06

UserDetailsService

UserSecurityService는 스프링 시큐리티 설정에 등록할 클래스이다. 이 클래스는 스프링 시큐리티 로그인 처리의 핵심 부분이다.

 

@RequiredArgsConstructor
@Service
public class UserSecurityService implements UserDetailsService {

    private final UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Optional<SiteUser> userOptional = userRepository.findByUsername(username);

        SiteUser user = userOptional.orElseThrow(() -> {
            throw new UsernameNotFoundException("사용자를 찾을 수 없습니다.");
        });

        List<GrantedAuthority> authorities = new ArrayList<>();
        if ("admin".equals(username)) { //ADMIN 권한 부여
            authorities.add(new SimpleGrantedAuthority(UserRole.ADMIN.getValue()));
        } else { //USER 권한 부여
            authorities.add(new SimpleGrantedAuthority(UserRole.USER.getValue()));
        }

        return new User(user.getUsername(), user.getPassword(), authorities);
    }
}

UserSecurityService는 스프링 시큐리티가 제공하는 UserDetailsService 인터페이스를 구현(implements) 해야 한다. UserDetailsService는 loadUserByUsername 메서드를 구현하도록 강제한다. 해당 메서드는 사용자명으로 비밀번호를 조회하여 찾은 사용자 객체를 리턴한다.

정확히는 UserDetailsService는 사용자의 정보를 가져오는 인터페이스이며, 사용자의 정보를 불러와서 UserDetails(반환 타입)로 반환한다.

 

UserDetails

위해서 UserDetailsService 인터페이스를 구현할 때 loadUserByUsername 메서드를 구현하도록 강제했다. 이때 반환 타입은 UserDetails였다. 

UserDetails는 사용자의 정보를 담는 인터페이스이다. 스프링 시큐리티에서 사용자의 정보를 불러오기 위해서 구현해야 하는 인터페이스로 기본 오버라이드 메서드는 아래와 같다.

메소드 리턴 타입 설명 기본값
getAuthorities() Collection<? extends
GrantedAuthorities>
계정의 권한 목록을 반환  
getPassword() String 계정의 비밀번호를 반환  
getUsername() String 계정의 고유한 값을 반환
(Ex. DB PK값,
중복이 없는 이메일 값)
 
isAccountNonExpired() boolean 계정의 만료 여부 반환 true(만료 안됨)
isAccountNonLocked() boolean 계정의 잠김 여부 반환 true(잠기지 않음)
isCredentialsNonExpired() boolean 비밀번호 만료 여부 반환 true(만료 안됨
isEnabled() boolean 계정의 활성화 여부 반환 true(활성화 됨)

 

 

 

 

 

참고

 

3-07 로그인과 로그아웃

* `[완성 소스]` : [https://github.com/pahkey/sbb3/tree/3-07](https://github.com/pahkey/sbb3/tree/3-07) …

wikidocs.net

 

Spring Security UserDetails, UserDetailsService 란? - 삽질중인 개발자

Spring Security - UserDetails , UserDetailsService UserDetails 란? Spring Security에서 사용자의 정보를 담는 인터페이스이다. Spring Security에서 사용자의 정보를 불러오기 위해서 구현해야 하는 인터페이스로 기본

programmer93.tistory.com

Comments