로그인 방식은 2가지가 있다.
- 일반 로그인
- aouth 로그인
<< 왼쪽은 oauth 로그인에 접근하기 위한 코드 >>
일반로그인으로 접근하려면 controller에서
@AuthenticationPrincipal PrincipalDetails userDetails
<< 오른쪽은 일반 로그인에 접근하기 위한 코드 >>
구글로그인으로 접근하려면 controller에서
@AuthenticationPrincipal OAuth2User oauth
=> 일반 로그인은 PrincipalDetails 에서 유저 정보를 가지고 오는 것이고, oauth 로그인에서는 OAuth2User에서 유저의 정보를 가지고 오는 것이다.
이처럼 서로 다른 두 로그인 방식에 접근하기 위해서 서로 다른 방식을 사용해야한다,
🗝️해결
기존 PrincipalDetails 클래스는 1) 아래처럼 UserDetails만 구현하는 상태였지만 2) 추가로 OAuth2User 인터페이스도 함께 구현하여 하나의 클래스에서 2개의 로그인 방식을 모두 처리할 수 있도록 하는 것이다.
// 1) 원래 PrincipalDetails 클래스의 코드
@Data
public class PrincipalDetails implements UserDetails {
private User user;
public PrincipalDetails(User user){
this.user=user;
}
// 2) PrincipalDetails 클래스에 OAuth2User 인터페이스를 추가로 구현하도록 한다.
@Data
public class PrincipalDetails implements UserDetails, OAuth2User {
private User user; //해당 user의 권한을 리턴하는 곳!!
public PrincipalDetails(User user){
this.user=user;
}

⭐@AuthenticationPrincipal이란 ?
@AuthenticationPrincipal은 Spring Security에서 제공하는 어노테이션 중 하나로, 현재 사용자(principal)에 대한 정보를 쉽게 가져오고 주입하기 위해 사용됩니다. 이 어노테이션을 컨트롤러 메서드의 매개변수로 사용하면, Spring Security가 제공하는 인증된 사용자(principal) 정보를 간단하게 가져올 수 있습니다.
principal은 현재 인증된 사용자를 나타내며, 보통 사용자의 식별자나 사용자 정보를 가리킨다.
'개발공부 > spring security & JWT 강의' 카테고리의 다른 글
[10강] 페이스북 로그인 완료 (0) | 2023.11.13 |
---|---|
[9강] 구글 로그인 및 자동 회원가입 진행 완료 (0) | 2023.11.12 |
[7강] 구글 회원 프로필 정보 받아보기 (0) | 2023.09.23 |
[6강] 구글 로그인 준비 (0) | 2023.09.22 |
[5강] 메소드 단위로 권한 설정하기 - @Secured (0) | 2023.09.21 |