
✅ 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