Spring Security의 기능을 사용하기 위해 User 엔티티를 기반으로 Spring Security의 User 객체(UserDetails 구현체)를 만들었다.
ex) User 엔티티:
@Entity
@Table(name = "users")
public class User {
@Id
private String studentId;
private String password;
// ...
}
ex) Spring Security의 User 객체 (UserDetails 구현체):
return org.springframework.security.core.userdetails.User
.withUsername(user.getStudentId())
.password(user.getPassword())
.authorities("ROLE_USER")
// ...
.build();
이 객체는 Spring Security의 내부 사용을 위한 특별한 형태의 객체이다.
Spring Security의 인증 및 권한 부여 메커니즘에서 사용된다.
User 엔티티의 핵심 정보(username, password)를 포함하고 있지만, Spring Security에 필요한 추가 정보(authorities, account status 등)도 함께 가지고 있다.
이 과정은 프로젝트의 도메인 모델(User 엔티티)을 Spring Security의 인증 모델(UserDetails)로 변환하는 과정이라고 볼 수 있다.
이렇게 함으로써 User 엔티티 구조와 Spring Security의 요구사항을 분리하여 관리할 수 있게 된다.
인증 과정:
비밀번호 검증:
인증 객체 생성:
권한 검사:
세션 관리:
현재 사용자 정보 접근:
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
UserDetails userDetails = (UserDetails) auth.getPrincipal();
로그아웃:
권한 기반 메소드 보안:
Remember-Me 기능:
OAuth2/JWT와의 통합:
이 객체는 Spring Security의 핵심 컴포넌트들과 긴밀하게 연동되어 작동하며, 애플리케이션의 전반적인 보안 아키텍처의 기반이 된다.