본문 바로가기
Java

스프링 시큐리티 : UserDetails, UserDetailsService 클래스 (+ 오버라이딩 예시)

by yapdol 2023. 9. 4.

 

 

 

 

 

 

 

 

 

 

 

 

UserDetails 클래스

Spring Security 에서 사용자의 인증 정보담아두는 인터페이스.

- Spring Security 에서 해당 객체를 통해 인증정보를 가져오므로 필수 오버라이드 메서드 8개가 있음.

- UserDetails 클래스를 상속 받아 인증 객체로 사용.

 

📌 필수 오버라이드 메서드

메서드 반환 타입 설명 특징
getAuthorities() Collection
<? extends GrantedAuthority>
유저가 가진 권한 목록 반환  
getUsername() String 유저를 식별할 수 있는 값 반환
(ex, PK, email)
반드시 고유값이어야함.
getPassword() String 유저 비밀번호 반환 비밀번호는 암호화해 저장해야함.
isAccountNonExpired() boolean 계정 만료 확인 만료X : true
isAccountNonLocked() boolean 계정 잠금 확인 잠금X : true
isCredentialsNonExpired() boolean 비밀번호 만료 확인 만료X : true
isEnable() boolean 계정 사용 가능 확인 사용가능 : true

 

📌 상속 &  오버라이딩 예시

@Table(name = "users")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Entity
public class User implements UserDetails { // UserDetails 를 상속 받아 인증 객체로 사용

    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false)
    private Long id;

    @Column(name = "email", nullable = false, unique = true)
    private String email;

    @Column(name = "password")
    private String password;

    @Builder
    public User(String email, String password, String auth) {
        this.email = email;
        this.password = password;
    }


    @Override // 권환 반환 : 사용자가 가진 권한 목록 반환 (여기선 user 밖에 없으므로 user 만 반환)
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return List.of(new SimpleGrantedAuthority("user"));
    }

    @Override // 사용자의 id 반환 (고유값) : 사용자를 식별가능한 고유값 반환.
    public String getUsername() {
        return email;
    }

    @Override // 사용자 패스워드 반환 : 패스워드는 암호화 되어야함.
    public String getPassword() {
        return password;
    }

    @Override // 계정 만료 여부 반환 : 만료O-false / 만료X - true 반환
    public boolean isAccountNonExpired() {
        // 만료됐는지 확인하는 로직
        return true; // true : 만료 X
    }

    @Override // 계정 잠금 여부 반환 : 잠금O-false / 잠금X - true 반환
    public boolean isAccountNonLocked() {
        // 계정 잠금됐는지 확인하는 로직
        return true; // true : 잠금 X
    }

    @Override // 패스워드 만료 여부 반환 : 만료O-false / 만료X - true 반환
    public boolean isCredentialsNonExpired() {
        // 패스워드가 만료됐는지 확인하는 로직
        return true;
    }

    @Override // 계정 사용 가능 여부 반환 : 사용불가능-false / 사용가능 - true 반환
    public boolean isEnabled() {
        // 계정이 사용 가능한지 확인하는 로직
        return true; // true : 사용가능
    }

}

 

 

 

 

 

 UserDetailsService 클래스

Spring Security 에서 로그인 시, 사용자의 인증 정보 가져오는 인터페이스.

loadUserByUsername( ) 메서드 :  사용자 정보를 가져오기 위해 구현해야하는 필수 오버라이드 메서드

 

 

📌 필수 오버라이드 메서드

메서드 반환 타입 설명
loadUserByUsernmae() UserDetails 유저 정보를 가져와 UserDetails 로 리턴

 

📌 상속 &  오버라이딩 예시

@RequiredArgsConstructor
@Service
// UserDetailsService : 스프링 시큐리티에서 사용자 정보를 가져오는 인터페이스
public class UserDetailService implements UserDetailsService {

    private final UserRepository userRepository;

    // 사용자 이름(email)으로 사용자의 정보를 가져오는 메서드
    @Override
    public User loadUserByUsername(String email) {
        return userRepository.findByEmail(email)
                .orElseThrow(() -> new IllegalArgumentException((email)));
    }

}

 

 

 

 

 

 

 

 

 

참고자료 :

https://programmer93.tistory.com/68

 

스프링 부트 3 백엔드 개발자 되기: 자바 편

https://product.kyobobook.co.kr/detail/S000201766024

 

스프링 부트 3 백엔드 개발자 되기: 자바 편 | 신선영 - 교보문고

스프링 부트 3 백엔드 개발자 되기: 자바 편 | ★ 자바 백엔드 개발자가 되고 싶다면 ★ 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은

product.kyobobook.co.kr