session - Authentication object(userdetails, oauth2user)
This commit is contained in:
@@ -9,13 +9,17 @@ package com.spring.security1.config.auth;
|
|||||||
// Security Session => Authentication => UserDetails
|
// Security Session => Authentication => UserDetails
|
||||||
|
|
||||||
import com.spring.security1.model.User;
|
import com.spring.security1.model.User;
|
||||||
|
import lombok.Data;
|
||||||
import org.springframework.security.core.GrantedAuthority;
|
import org.springframework.security.core.GrantedAuthority;
|
||||||
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
|
import org.springframework.security.oauth2.core.user.OAuth2User;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class PrincipalDetails implements UserDetails {
|
@Data
|
||||||
|
public class PrincipalDetails implements UserDetails, OAuth2User {
|
||||||
|
|
||||||
private User user;
|
private User user;
|
||||||
|
|
||||||
@@ -68,4 +72,14 @@ public class PrincipalDetails implements UserDetails {
|
|||||||
// 현재시간 - 로그인 시간 => 1년을 초과하면 false 리턴
|
// 현재시간 - 로그인 시간 => 1년을 초과하면 false 리턴
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> getAttributes() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,10 +12,13 @@ public class PrincipalOauth2UserService extends DefaultOAuth2UserService {
|
|||||||
// 구글로부터 받은 userRequest 데이터에 대한 후처리 되는 함수
|
// 구글로부터 받은 userRequest 데이터에 대한 후처리 되는 함수
|
||||||
@Override
|
@Override
|
||||||
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
|
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());
|
System.out.println("userRequest: "+ userRequest.getAccessToken().getTokenValue());
|
||||||
|
// 구글 로그인 버튼 클릭 -> 구글 로그인 창 -> 로그인을 완료 -> code를 리턴(OAuth-Client 라이브러리) -> AccessToken 요청
|
||||||
|
// userRequest 정보 -> loadUser함수 -> 구글로 부터 회원 프로필 받아준다.
|
||||||
System.out.println("userRequest: "+ super.loadUser(userRequest).getAttributes());
|
System.out.println("userRequest: "+ super.loadUser(userRequest).getAttributes());
|
||||||
|
|
||||||
|
OAuth2User auth2User = super.loadUser(userRequest);
|
||||||
return super.loadUser(userRequest);
|
return super.loadUser(userRequest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,16 @@
|
|||||||
package com.spring.security1.controller;
|
package com.spring.security1.controller;
|
||||||
|
|
||||||
|
import com.spring.security1.config.auth.PrincipalDetails;
|
||||||
import com.spring.security1.model.User;
|
import com.spring.security1.model.User;
|
||||||
import com.spring.security1.repository.UserRepository;
|
import com.spring.security1.repository.UserRepository;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.security.access.annotation.Secured;
|
import org.springframework.security.access.annotation.Secured;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
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.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
|
import org.springframework.security.oauth2.core.user.OAuth2User;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
@@ -18,6 +23,30 @@ public class IndexController {
|
|||||||
private final UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
private final BCryptPasswordEncoder bCryptPasswordEncoder;
|
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({"", "/"})
|
@GetMapping({"", "/"})
|
||||||
public String index() {
|
public String index() {
|
||||||
// 머스테치 기본폴더 src/main/resources/
|
// 머스테치 기본폴더 src/main/resources/
|
||||||
|
|||||||
Reference in New Issue
Block a user