Spring Security 구글 아이디로 회원 가입

최고요·2023년 4월 24일
2

Spring Security V1 

목록 보기
6/9
post-thumbnail

IndexController


IndexController 클래스에 로그인 테스트를 위한 메서드를 작성해줍니다.

index페이지에서 loginForm.html로 이동 후 (aouth로그인X)
기존 join.html에서 회원가입한 정보로 로그인을 해줍니다.


PrincipalDetails 클래스에 getter를 사용하기위해 @Data 어노테이션 추가



Authentication DI - 의존성 주입으로 파라미터를 주게되면
반환하는 타입이 object이기 때문에

PrincipalDerails principalDerails = (PrincipalDerails) authentication.getPrincipal();
System.out.println("principalDerails :"+principalDerails.getUser());

형변환 하여 getUser()호출을 하게되면 회원정보를 확인할 수 있습니다.

@AuthenticationPrincipal 어노테이션을 통해서 세션정보에 접근할 수 있습니다.

System.out.println("======================");
System.out.println("userDetails - UserName :"+userDetails.getUsername());

@AuthenticationPrincipal 은 UserDetails 타입을 가지고 있지만
PrincipalDerails 이 UserDetails 상속받았기 때문에

PrincipalDerails 타입으로 코드를 수정할 수 있습니다.
-자식과 부모의 관계이기 때문에-

@AuthenticationPrincipal PrincipalDerails userDetails 

구글 로그인한 회원의 정보를 받아오려면
오브젝트 타입을 OAuth2User 타입으로 형변환 하여 결과를 받아야 합니다.
OAuth2User oAuth2User = (OAuth2User) authentication.getPrincipal();

스프링 시큐리티는 로그인이 완료되면 서버 자체 세션이 아닌 시큐리티가 관리하는 세션을 만들어내는데,
security session에 들어갈 수 있는 객체의 타입은
authentication타입이어야합니다.

authentication안에 들어갈 수있는 객체타입은
UserDetails,OAuth2User 두가지 입니다.

일반적인 로그인을 하게되면 UeserDetails 타입의 객체로 들어가게되고
OAuth2를 사용해서 로그인을 하게되면 OAuth2User 로들어가게 됩니다.

그렇다면 컨트롤러를 2가지를 사용해야될까 ?

정답은 X입니다.

PrincipalDerails 클래스는 이미 UserDetails를 상속받고 있으므로 OAuth2User를 같이 상속받으면 PrincipalDerails타입으로 회원정보를 받을 수 있습니다.

profile
i'm best

0개의 댓글