스프링 시큐리티 사용자 관리

조승빈·2024년 5월 8일

Spring Security

목록 보기
2/11

UserDetails

인증된 사용자에 대한 정보를 제공하는 표준 계약이다.

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
}

GrantedAuthority

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
}

UserDetailsService

사용자 인증 과정에서 사용되며, 주어진 사용자명(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")
    }
}
profile
평범

0개의 댓글