본문 바로가기
프로젝트/SpringSecurity

[Spring Security] 6. OAuth 구글로그인(3)

by dantriss 2023. 7. 5.

유튜브에서 스프링시큐리티를 심화교육하면서 조금더 레벨업 하고자 한다.

IDE : IntelliJ

언어 : Java 8

스프링부트 버전 : 2.7.13

DB : MySQL

빌드관리 도구 : Maven

OS : iOS

참고유튜브 : 메타코딩


 

IndexController에서 세션에 저장되어 있는 유저의 정보를 확인해보자

 

우선 일반 로그인한 유저는 UserDetails타입으로 확인해볼 수 있고

세션에는 Authentication에 저장되어 있는 유저의 정보를 PrincipalDetails로 형변환을 한 후 확인해볼 수 있다.

    @GetMapping("/test")
    public @ResponseBody String test(Authentication authentication, @AuthenticationPrincipal UserDetails details){

        UserDetails authenticationDetail = (UserDetails) authentication.getPrincipal();

        System.out.println("id test PrincipalDetails : "+details.getUsername());
        System.out.println("id test (userDetails)authentication : "+authenticationDetail.getUsername());

        return "테스트입니다.";
    }

출력을 해보기 위해서 PrincipalDetails에 getter 를 추가해줘야 하기 때문에 Data 어노테이션을 추가해준다.

 

서버를 실행해서 로그인 후 /test 로 이동하면 콘솔에 두가지 방법으로 유저의 아이디를 확인해볼 수 있다.

OAuth 로그인한 유저의 정보도 확인해보자

마찬가지로 세션에 저장되어 있는 유저의 정보를 확인해보기 위해 authentication과 OAuth2User를 파라메터로 받아서 유저의 정보를 출력해본다. authentication에서 유저의 정보를 가져오기 위해선 OAuth2User로 형변환을 해줘야한다.

    @GetMapping("/oauthtest")
    public @ResponseBody String oauthtest(Authentication authentication, @AuthenticationPrincipal OAuth2User oAuth2User){

        OAuth2User authenticationOAuth = (OAuth2User) authentication.getPrincipal();

        System.out.println("id test oAuth2User: "+ oAuth2User.getAttributes());
        System.out.println("id test (OAuth2User)authenticationOAuth: "+ authenticationOAuth.getAttributes());

        return "oauth 테스트입니다.";
    }

 

서버를 실행해서 구글로 로그인 후 /oauthtest 로 이동하면 콘솔에 마찬가지로 두가지 방법으로 유저의 아이디를 확인해볼 수 있다.

 

일반로그인한 유저는 UserDetails타입으로 확인이 가능하고 구글로그인한 유저는 OAuth2User타입으로 확인이 가능하고 관리를 한다면

상당히 복잡스럽게 관리를 해야할 것이다.

그래서 이 두가지를 한곳에 상속을 시켜서 관리를 하면 훨씬 편하게 관리를 할 수 있기 때문에 

PrincipalDetails에 UserDetails와 OAuth2User를 상속받아서 한번에 관리를 해보자

UserDetails는 이미 상속을 받은 상태이기 때문에 OAuth2User를 상속받아서 생성자를 추가해준다. (윈도우/맥 단축키 ctrl+o)

 

그후 파라메터로 PrincipalDetails를 받아서 테스트를 진행해보면 일반로그인유저와 OAuth로그인 유저를 principalDetails하나로 관리할 수 있다.

 

댓글