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개의 댓글

Powered by GraphCDN, the GraphQL CDN