Spring Security에서 인증 정보를 담고 있는 가장 상위 개념이다. 사용자의 인증 상태와 관련된 모든 정보를 포함하며 로그인 성공 후 SecurityContext에 저장되어 SecurityContextHolder를 통해 전역적으로 접근 가능하다.
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String username = authentication.getName();
일반적으로 Java EE에서 사용되는 인터페이스로, 인증된 사용자에 대한 정보를 나타낸다.
Authentication의 getPrincipal() 메서드가 반환하는 객체가 바로 Principal이다.
Principal에는 주로 getName() 메서드가 정의되어 있으며, 주로 사용자 이름 또는 ID와 같은 고유한 식별 정보를 반환한다. 컨트롤러에서 인증된 사용자를 가져올 때 사용한다.
Spring Security에서는 Principal이 UserDetails 객체일 수도 있고, 사용자 정의 객체일 수도 있다.
@GetMapping("/profile")
public String getProfile(Principal principal) {
String username = principal.getName();
return "Profile of " + username;
}
Spring Security에서 사용자의 세부 정보를 담는 인터페이스이다. 주로 사용자 이름, 비밀번호, 권한 등의 정보를 제공한다. UserDetailsService를 통해 로드된 사용자 정보가 이 UserDetails에 담긴다.
사용자 인증 및 권한 관리에서 사용되며, 로그인 시 DB나 외부 서비스에서 사용자 정보를 로드할 때 주로 사용된다.