
인증된 사용자에 대한 정보를 제공하는 표준 계약이다.
UserDetails 예시코드
import org.springframework.security.core.GrantedAuthority
import org.springframework.security.core.userdetails.UserDetails
data class CustomUserDetails(
private val username: String,
private val password: String,
private val auth
orities: Collection<
GrantedAuthority>,
private val isAccountNonExpired: Boolean = true,
private val isAccountNonLocked: Boolean = true,
private val isCredentialsNonExpired: Boolean = true,
private val isEnabled: Boolean = true
) : UserDetails {
override fun getUsername(): String = username
override fun getPassword(): String = password
override fun getAuthorities(): Collection<GrantedAuthority> = authorities
// 계정 만료
override fun isAccountNonExpired(): Boolean = isAccountNonExpired
// 계정 잠금
override fun isAccountNonLocked(): Boolean = isAccountNonLocked
// 자격 증명 만료
override fun isCredentialsNonExpired(): Boolean = isCredentialsNonExpired
// 계정 비활성화
override fun isEnabled(): Boolean = isEnabled
}
Spring Security에서 사용자에게 부여된 권한을 나타낸다.
GrantedAuthority 예시코드
import org.springframework.security.core.GrantedAuthority
data class SimpleGrantedAuthority(private val authority: String) : GrantedAuthority {
// 권한을 나타내는 문자열을 반환
// 일반적으로 이 문자열은 "ROLE_USER", "ROLE_ADMIN" 등과 같이 "ROLE_" 접두사를 사용하여 역할을 나타낸다.
override fun getAuthority(): String = authority
}
사용자 인증 과정에서 사용되며, 주어진 사용자명(username)에 해당하는 UserDetails 객체를 반환한다.
UserDetailsService 예시코드
import org.springframework.security.core.userdetails.UserDetailsService
import org.springframework.security.core.userdetails.UserDetails
import org.springframework.security.core.userdetails.UsernameNotFoundException
import org.springframework.security.core.authority.SimpleGrantedAuthority
import org.springframework.security.core.userdetails.User
class SimpleUserDetailsService : UserDetailsService {
// 요청된 사용자명을 키로 사용하여 해당 사용자 정보를 조회.
// 사용자 정보가 맵에 없는 경우 UsernameNotFoundException을 발생
override fun loadUserByUsername(username: String): UserDetails {
return users[username] ?: throw UsernameNotFoundException("User not found: $username")
}
}