728x90
반응형
**Principal**은 **스프링 시큐리티(Spring Security)**에서 현재 인증된 사용자의 정보를 담고 있는 객체입니다. 사용자가 애플리케이션에 로그인을 성공하면 스프링 시큐리티는 사용자의 정보를 Principal 객체에 저장하고, 이 객체를 통해 애플리케이션의 다른 부분에서 사용자 정보를 쉽게 접근할 수 있게 합니다.
Principal 인터페이스는 자바 표준이기 때문에 스프링뿐만 아니라 다른 프레임워크에서도 사용할 수 있습니다. 스프링 시큐리티는 이 표준을 활용하여 사용자 정보 접근을 제공하며, 이를 통해 사용자의 ID, 이름, 권한 등의 정보를 얻을 수 있습니다.
스프링 시큐리티에서 Principal의 역할
- 로그인된 사용자 정보 확인: 로그인된 사용자에 대한 정보를 제공.
- 인증된 사용자와의 상호작용: 인증된 사용자의 역할, 권한, 아이디 등을 확인하여 접근 제어나 비즈니스 로직에서 활용할 수 있습니다.
사용 예시
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을 사용한 인증 흐름
- 로그인: 사용자가 로그인하면 스프링 시큐리티는 해당 사용자의 정보를 Principal 객체에 저장합니다.
- 보호된 자원 접근: 사용자가 인증된 상태에서 보호된 페이지에 접근할 때, 스프링 시큐리티는 Principal을 이용해 현재 사용자가 누구인지 파악합니다.
- 권한 확인: Principal 또는 @AuthenticationPrincipal을 사용하여 사용자가 어떤 권한을 가지고 있는지 확인하고, 이에 따라 접근을 허용하거나 거부할 수 있습니다.
요약
- Principal: 스프링 시큐리티에서 현재 인증된 사용자 정보를 담고 있는 객체입니다.
- 주요 기능: 로그인한 사용자의 이름, 권한 등을 조회하고, 사용자와 상호작용하는 데 사용됩니다.
- 사용 예시: 컨트롤러 메서드에서 Principal 또는 @AuthenticationPrincipal로 사용자 정보를 접근할 수 있습니다.
스프링 시큐리티는 이러한 Principal 객체를 활용하여 애플리케이션의 보안을 강화하고 사용자별 권한을 관리할 수 있습니다.
'Category > SpringBoot' 카테고리의 다른 글
| 스프링 시큐리티 #authentication.getPrincipal() (0) | 2024.09.06 |
|---|---|
| 스프링 시큐리티 @PreAuthorize("isAuthenticated()") (0) | 2024.09.05 |
| 타임리프 확장 기능 sec:authorize (0) | 2024.09.05 |
| 스프링 시큐리티 .invalidateHttpSession(true) (0) | 2024.09.05 |
| 스프링 시큐리티 @PostMapping (0) | 2024.09.05 |