본문 바로가기
Category/SpringBoot

스프링 시큐리티 Principal

by Corinee 2024. 9. 5.
728x90
반응형

**Principal**은 **스프링 시큐리티(Spring Security)**에서 현재 인증된 사용자의 정보를 담고 있는 객체입니다. 사용자가 애플리케이션에 로그인을 성공하면 스프링 시큐리티는 사용자의 정보를 Principal 객체에 저장하고, 이 객체를 통해 애플리케이션의 다른 부분에서 사용자 정보를 쉽게 접근할 수 있게 합니다.

Principal 인터페이스는 자바 표준이기 때문에 스프링뿐만 아니라 다른 프레임워크에서도 사용할 수 있습니다. 스프링 시큐리티는 이 표준을 활용하여 사용자 정보 접근을 제공하며, 이를 통해 사용자의 ID, 이름, 권한 등의 정보를 얻을 수 있습니다.

스프링 시큐리티에서 Principal의 역할

  1. 로그인된 사용자 정보 확인: 로그인된 사용자에 대한 정보를 제공.
  2. 인증된 사용자와의 상호작용: 인증된 사용자의 역할, 권한, 아이디 등을 확인하여 접근 제어나 비즈니스 로직에서 활용할 수 있습니다.

사용 예시

1. 컨트롤러에서 Principal 사용

@GetMapping("/userInfo") 
public String userInfo(Principal principal) { 
	// principal.getName()을 사용하여 현재 로그인한 사용자의 이름을 가져옴 
	String username = principal.getName(); 
	System.out.println("로그인된 사용자: " + username); 
	return "userInfoPage"; 
}
  • 위 코드는 현재 로그인된 사용자의 이름을 출력하는 간단한 예입니다.
  • principal.getName()은 현재 인증된 사용자의 이름(대개 사용자 ID 또는 username)을 반환합니다.

2. 스프링 시큐리티의 @AuthenticationPrincipal을 사용하여 Principal 접근

스프링 시큐리티는 인증된 사용자 정보에 접근하기 위한 @AuthenticationPrincipal 애너테이션을 제공합니다.

@GetMapping("/profile") 
public String profile(@AuthenticationPrincipal UserDetails userDetails) { 
    // UserDetails를 사용해 사용자 정보를 가져옴 
    String username = userDetails.getUsername(); 
    return "profilePage"; 
}
  • UserDetails는 스프링 시큐리티가 제공하는 사용자 정보 인터페이스입니다. 로그인한 사용자의 세부 정보는 UserDetails를 통해 쉽게 접근할 수 있습니다.
  • Principal 객체 대신 @AuthenticationPrincipal을 사용하여 더 세부적인 사용자 정보를 얻을 수 있습니다.

Principal을 사용한 인증 흐름

  1. 로그인: 사용자가 로그인하면 스프링 시큐리티는 해당 사용자의 정보를 Principal 객체에 저장합니다.
  2. 보호된 자원 접근: 사용자가 인증된 상태에서 보호된 페이지에 접근할 때, 스프링 시큐리티는 Principal을 이용해 현재 사용자가 누구인지 파악합니다.
  3. 권한 확인: Principal 또는 @AuthenticationPrincipal을 사용하여 사용자가 어떤 권한을 가지고 있는지 확인하고, 이에 따라 접근을 허용하거나 거부할 수 있습니다.

요약

  • Principal: 스프링 시큐리티에서 현재 인증된 사용자 정보를 담고 있는 객체입니다.
  • 주요 기능: 로그인한 사용자의 이름, 권한 등을 조회하고, 사용자와 상호작용하는 데 사용됩니다.
  • 사용 예시: 컨트롤러 메서드에서 Principal 또는 @AuthenticationPrincipal로 사용자 정보를 접근할 수 있습니다.

스프링 시큐리티는 이러한 Principal 객체를 활용하여 애플리케이션의 보안을 강화하고 사용자별 권한을 관리할 수 있습니다.