Spring Security에서 UserDetails 인터페이스

청포도봉봉이·2023년 9월 19일
0

Spring

목록 보기
25/35
post-thumbnail

🚩 Spring security

Spring Security를 사용하는 웹 애플리케이션에서는 UserDetails 인터페이스를 구현하는 클래스를 사용하는 것이 일반적이다.

👉 UserDetails

Spring Security에서 UserDetails 인터페이스는 사용자의 정보를 나타내는 역할을 한다.
이 인터페이스를 구현하는 클래스의 객체는 현재 로그인한 사용자의 세부 정보를 Spring Security에 제공한다.

UserDetails 인터페이스에는 다음과 같은 메소드들이 정의되어 있다:

👉 Methods

  • Collection<? extends GrantedAuthority> getAuthorities(): 사용자가 가진 권한을 반환한다.
  • String getPassword(): 사용자의 비밀번호를 반환한다.
  • String getUsername(): 사용자 이름(보통 로그인 ID)을 반환한다.
  • boolean isAccountNonExpired(): 계정이 만료되지 않았음을 확인한다.
  • boolean isAccountNonLocked(): 계정이 잠기지 않았음을 확인한다.
  • boolean isCredentialsNonExpired(): 자격 증명(비밀번호 등)이 만료되지 않았음을 확인한다.
  • boolean isEnabled(): 계정이 활성화 상태임을 확인한다.




👉 Example

다음은 UserDetails 인터페이스를 구현하는 간단한 예제 코드다:

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import javax.persistence.*;
import java.util.Collection;
import java.util.Collections;

@Entity
public class User implements UserDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;
    private String password;
    private boolean enabled;

    // ... getters and setters ...

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return Collections.singleton(new SimpleGrantedAuthority("USER"));
        // 여기서는 단순하게 "USER" 권한만 부여했다. 실제로는 DB에서 해당 유저가 가진 권한들을 불러와야 한다.
    }

    @Override
    public boolean isAccountNonExpired() {
        return true; // 실제로는 DB에서 해당 정보를 불러와야 한다.
    }

   @Override
   public boolean isAccountNonLocked() {
       return true; // 실제로는 DB에서 해당 정보를 불러와야 한다.
   }

   @Override
   public boolean isCredentialsNonExpired() {
       return true; // 실제로는 DB에서 해당 정보를 불러와야 한다.
   }
}

위 예시 코드에서, 각 메소드가 단순하게 상수 값을 반환하도록 작성되었다. 하지만 실제 애플리케이션에서 이 메소드들은 보통 데이터베이스 또는 다른 저장소에서 사용자 정보를 조회하여 그 결과를 반환하도록 구현해야 한다. 예를 들어, getAuthorities() 메소드는 사용자가 가진 모든 권한을 데이터베이스에서 조회하여 반환해야 한다.

또한, 이 UserDetails 인터페이스를 구현하는 클래스의 객체는 보통 UserDetailsService 인터페이스를 구현하는 서비스 클래스에서 로드된다. 이 서비스 클래스는 Spring Security 설정에서 지정되며, 로그인 시에 입력된 사용자 이름을 기반으로 해당 사용자의 UserDetails 객체를 로드하는 역할을 한다.

profile
서버 백엔드 개발자

0개의 댓글