PrincipalOauth2UserService의 loadUser메서드에 아래 코드를 추가해주자
OAuth2User oAuth2User = super.loadUser(userRequest);
@GetMapping("/test/login")
public @ResponseBody String loginTest(Authentication authentication,
@AuthenticationPrincipal PrincipalDetails userDetails) { // DI(의존성주입)
System.out.println("/test/login =========");
// 1. Authetication을 PrincipalDetails로 캐스팅하여 사용하는 방법
// PrincipalDetails는 우리가 앞서 생성했던 config.auth.PrincipalDetails
PrincipalDetails principalDetails = (PrincipalDetails) authentication.getPrincipal();
System.out.println("principalDetails = " + principalDetails.getUser());
// 2. @AuthenticationPrincipal을 사용하는 방법
// PrincipalDetails가 UserDetails를 상속받고 있기 때문에
// UserDetails 대신에 PrincipalDetails를 사용할 수 있음
System.out.println("userDetails = " + userDetails.getUser());
return "세션 정보 확인하기";
}
/test/login =========
principalDetails = User(id=4, username=test,
password=$2a$10$BoYddAVEZUr6OWm2ttODaOdMykaawnD4zW11RLbSCQvZ6b8Yh7bJu,
email=test@naver.com, role=ROLE_USER, provider=null, providerId=null,
loginDate=null, createDate=2023-04-03 15:37:02.575)
userDetails = User(id=4, username=test,
password=$2a$10$BoYddAVEZUr6OWm2ttODaOdMykaawnD4zW11RLbSCQvZ6b8Yh7bJu,
email=test@naver.com, role=ROLE_USER, provider=null, providerId=null,
loginDate=null, createDate=2023-04-03 15:37:02.575)
@GetMapping("/test/oauth/login")
public String loginOAuthTest(Authentication authentication,
@AuthenticationPrincipal OAuth2User oAuth) { // DI(의존성주입)
System.out.println("/test/oauth/login =========");
// 1. 캐스팅해서 가져오기
OAuth2User oAuth2User = (OAuth2User) authentication.getPrincipal();
System.out.println("authentication = " + oAuth2User.getAttributes());
// 2. @AuthenticationPrincipal로 가져오기
System.out.println("OAuth2User = " + oAuth.getAttributes());
return "OAuth 세션 정보 확인하기";
}
//com.cos.security1.config.oauth.PrincipalOauth2UserService
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
// registrationId로 어떤 oauth로 로그인 했는지 알 수 있음
System.out.println("userRequest : " + userRequest.getClientRegistration());
System.out.println("userRequest = " + userRequest.getAccessToken().getTokenValue());
// 구글 로그인 버튼 클릭 -> 구글 로그인 창 -> 로그인을 완료
// -> code를 리턴(Oauth-client라이브러리 -> AccessToken 요청
// userRequest정보 -> loadUser함수 호출 -> 구글로부터 회원 프로필을 받아줌
System.out.println("userRequest = " + super.loadUser(userRequest).getAttributes());
OAuth2User oAuth2User = super.loadUser(userRequest);
// 회원가입을 강제로 진행해볼 예점
return super.loadUser(userRequest);
}