Spring/Spring Security

[Spring Security] 로그인 사용자 정보 가져오기

제우제우 2024. 9. 3. 12:06

@AuthenticationPrincipal

Spring Security에서 사용되는 어노테이션

이 어노테이션은 주로 컨트롤러 메서드의 인자로 사용

현재 로그인한 사용자의 정보를 쉽게 접근할 수 있도록 해준다. 

@AuthenticationPrincipal을 사용하면 Spring Security는 자동으로 인증된 사용자의 Principal 객체를 메서드 파라미터에 주입

이 Principal 객체는 일반적으로 사용자명이나 사용자 ID와 같은 정보가 포함된 UserDetails 객체

 

사용 방법 

UserPrincipal(UserDetails(인터페이스) - 구현체(User) - 상속(UserPrincipal) 커스텀 클래스 

public class UserPrincipal extends User {
    private final Long userId;
    public UserPrincipal(com.jeulog.domain.User user){
        super(user.getEmail(), user.getPassword(), List.of(
                new SimpleGrantedAuthority("ROLE_USER")
        ));
        userId = user.getId();
    }
    public Long getUserId() {
        return userId;
    }
}

앞에서 설명했듯이 스프링 시큐리티는 @AuthenticationPrincipal을 사용하면 자동으로 인증된 사용자의 Principal(UserDetails)객체를 주입을 해준다. 

 

테스트용 컨트롤러 

@RestController
public class MainController {
    @GetMapping("/")
    public String main(){
        return "메인 페이지";
    }
    @GetMapping("/user")
    public String user(@AuthenticationPrincipal UserPrincipal userPrincipal){
        return "사용자 페이지입니다.";
    }
    @GetMapping("/admin")
    public String admin(){
        return "관리자 페이지입니다.";
    }
}

 

디버깅 모드로 테스트