diff --git a/spring-security/src/main/java/com/spring/security1/config/auth/PrincipalDetails.java b/spring-security/src/main/java/com/spring/security1/config/auth/PrincipalDetails.java index fdb760d4..ad6b8e70 100644 --- a/spring-security/src/main/java/com/spring/security1/config/auth/PrincipalDetails.java +++ b/spring-security/src/main/java/com/spring/security1/config/auth/PrincipalDetails.java @@ -9,13 +9,17 @@ package com.spring.security1.config.auth; // Security Session => Authentication => UserDetails import com.spring.security1.model.User; +import lombok.Data; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.oauth2.core.user.OAuth2User; import java.util.ArrayList; import java.util.Collection; +import java.util.Map; -public class PrincipalDetails implements UserDetails { +@Data +public class PrincipalDetails implements UserDetails, OAuth2User { private User user; @@ -68,4 +72,14 @@ public class PrincipalDetails implements UserDetails { // 현재시간 - 로그인 시간 => 1년을 초과하면 false 리턴 return true; } + + @Override + public Map getAttributes() { + return null; + } + + @Override + public String getName() { + return null; + } } diff --git a/spring-security/src/main/java/com/spring/security1/config/oauth/PrincipalOauth2UserService.java b/spring-security/src/main/java/com/spring/security1/config/oauth/PrincipalOauth2UserService.java index 5946bc20..116dd925 100644 --- a/spring-security/src/main/java/com/spring/security1/config/oauth/PrincipalOauth2UserService.java +++ b/spring-security/src/main/java/com/spring/security1/config/oauth/PrincipalOauth2UserService.java @@ -12,10 +12,13 @@ public class PrincipalOauth2UserService extends DefaultOAuth2UserService { // 구글로부터 받은 userRequest 데이터에 대한 후처리 되는 함수 @Override public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException { - System.out.println("userRequest: "+ userRequest.getClientRegistration()); + System.out.println("userRequest: "+ userRequest.getClientRegistration()); // registrationId로 어떤oauth로 로그인했는지 확인가능. System.out.println("userRequest: "+ userRequest.getAccessToken().getTokenValue()); + // 구글 로그인 버튼 클릭 -> 구글 로그인 창 -> 로그인을 완료 -> code를 리턴(OAuth-Client 라이브러리) -> AccessToken 요청 + // userRequest 정보 -> loadUser함수 -> 구글로 부터 회원 프로필 받아준다. System.out.println("userRequest: "+ super.loadUser(userRequest).getAttributes()); + OAuth2User auth2User = super.loadUser(userRequest); return super.loadUser(userRequest); } } diff --git a/spring-security/src/main/java/com/spring/security1/controller/IndexController.java b/spring-security/src/main/java/com/spring/security1/controller/IndexController.java index 6f896ab2..63666394 100644 --- a/spring-security/src/main/java/com/spring/security1/controller/IndexController.java +++ b/spring-security/src/main/java/com/spring/security1/controller/IndexController.java @@ -1,11 +1,16 @@ package com.spring.security1.controller; +import com.spring.security1.config.auth.PrincipalDetails; import com.spring.security1.model.User; import com.spring.security1.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.security.access.annotation.Secured; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -18,6 +23,30 @@ public class IndexController { private final UserRepository userRepository; private final BCryptPasswordEncoder bCryptPasswordEncoder; + @ResponseBody + @GetMapping("/test/login") + public String testLogin(Authentication authentication, + @AuthenticationPrincipal PrincipalDetails userDetails) { + System.out.println("/test/logtin ================"); + PrincipalDetails principalDetails = (PrincipalDetails) authentication.getPrincipal(); + System.out.println("authentication: " + principalDetails.getUser()); + + System.out.println("userDetails: " + userDetails.getUser()); + return "세션 정보 확인하기"; + } + + @ResponseBody + @GetMapping("/test/oauth/login") + public String testOAuthLogin(Authentication authentication, + @AuthenticationPrincipal OAuth2User oAuth) { + System.out.println("/test/logtin ================"); + OAuth2User oAuth2User = (OAuth2User) authentication.getPrincipal(); + System.out.println("authentication: " + oAuth2User.getAttributes()); + System.out.println("Oauth2User: " + oAuth.getAttributes()); + + return "OAuth 세션 정보 확인하기"; + } + @GetMapping({"", "/"}) public String index() { // 머스테치 기본폴더 src/main/resources/