session - Authentication object(userdetails, oauth2user)

This commit is contained in:
kim
2020-12-10 01:01:48 +09:00
parent e77ae79d04
commit d748c108b8
3 changed files with 48 additions and 2 deletions

View File

@@ -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<String, Object> getAttributes() {
return null;
}
@Override
public String getName() {
return null;
}
}

View File

@@ -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);
}
}

View File

@@ -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/