프로젝트에 참고한 책: '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'

 

로그인 관련 정보를 전달해주는 dto는 두가지가 있다.

하나는 OAuthAttributes이고, 다른 하나는 SessionUser이다

 

1. OAuthAttributes

 

필드 선언(attributes, nameAttributeKey 추가 되었다)

 

OAuthAttributes 필드가지고 생성자 생성하기 

 

of() 메소드 선언 

registrationId가 naver라면 ofNaver()를 반환하고, naver가 아니면 ofGoogle()로 반환한다 

 

ofGoogle()은 attributes에서 name,email,picture가져오고, attributes에서 attributes가져오고(?), userNameAttributeName에사 nameAttributeKey 가져온다(?)

ofNaver()는 먼저 response 객체를 생성한다

resonse에서 name,email,profile_image,attributes를 가져온다

마지막으로 userNameAttributeName에서 nameAttributeKey를 가져온다(?) 모르겐네,,,

 

-of(): OAuth2User에서 반환하는 사용자 정보는 Map이기 때문에 값 하나하나를 반환해야 한다

 

주어진 이름,이메일,사진,권한으로 User 엔티티 생성한다

-toEntity(): User 엔티티를 생성한다.

OAuthAttributes에서 엔티티를 처음 생성하는 시점은 처음 가입할 때이므로, GUEST 권한을 준다.

guest 권한을 주기 위해 role(Role.GUEST)를 사용한다 

 

2.SessionUser

이는 세션에 인증된 사용자 정보를 저장하기위해 사용하는 dto 클래스이다

user클래스를 쓰지 않고 따로 만든 이유는 직렬화 기능을 보장하기 위해서이다

user는 entity 클래스이므로 다른 엔티티와 언제 연관관계를 맺을지 모르기 때문에 직렬화가 되어도 부수적인 오류가 발생할 수 있기 때문에 dto를 따로 만들어서 정보를 저장한다

코드는 비교적 간단하다 

 

Serializable(직렬화): 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술.

 

 

 

3. Index Controller

 

index.mustache에서 userName을 사용할 수 있게 IndexControlle에서 userName을 model에 저장하는 코드를 추가한다 

 

-(SessionUser) httpSession.getAttribute("user): 로그인 성공 시 httpSession.getAttribute("user")에서 값을 가져올 수 있다

-if(user !=null): 세션에 저장된 값이 있을 때만 model에 userName을 등록한다 

+ Recent posts