Gom3rye

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 5장 (로그인 기능 구현) 본문

웹 개발

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 5장 (로그인 기능 구현)

Gom3rye 2022. 8. 12. 22:33

각 사용자의 권한을 관리할 Enum 클래스 Role을 생성
스프링 시큐리티에서는 권한 코드에 항상 ROLE_ 이 앞에 있어야 한다. -> 코드별 키 값을 ROLE_GUEST, ROLE_USER 등으로 지정

시큐리티 관련 클래스는 모두 gom2rye.book.springboot.config.auth 패키지에 담는다.
설정 코드 작성이 끝났다면 CustomOAuth2UserService 클래스를 생성에 구글 로그인 이후 가져온 사용자의 정보등을 기반으로 가입 및 정보 수정, 세션 저장 등의 기능을 지원한다.

registrationId : 지금은 구글만 사용하는 불필요한 값이지만, 이후 네이버 로그인 연동 시에 네이버 로그인인지, 구글 로그인인지 구분하기 위해 사용한다.
userNameAttributeName
: OAuth2 로그인 진행 시 키가 되는 필드값을 이야기한다. Primary Key와 같은 의미
구글의 경우 기본적으로 코드를 지원하지만, 네이버 카카오 등은 기본 지원하지 않는다. 구글의 기본 코드는 "sub" 이다.
이 후 네이버 로그인과 구글 로그인을 동시 지원할 때 사용된다.
OAuthAttributes : OAuth2UserService를 통해 가져온 OAuth2User의 attribute를 담을 클래스이다.
이 후 네이버 등 다른 소셜 로그인도 이 클래스를 사용한다.

httpSession.setAttribute("user", new SessionUser(user)); // SessionUser : 세션에 사용자 정보를 저장하기 위한 Dto 클래스

 

of()

- OAuth2User에서 반환하는 사용자 정보는 Map이기 때문에 값 하나하나를 변환해야만 한다.

toEntity

- User 엔티티를 생성합니다.
- OAuthAttributes에서 엔티티를 생성하는 시점은 처음 가입할 때
- 가입할 때의 기본 권한을 GUEST로 주기 위해 role 빌더 값에는 Role.GUEST를 사용한다.

- OAuthAttributes 클래스 생성이 끝났으면 같은 패키지에 SessionUser클래스를 생성한다.

 

{{#userName}} // 머스테치는 true/false만 판단한다.

-> 윈도우의 경우 userName이라는 변수명을 이미 사용하기 때문에 loginUserName 이렇게 바꿔주자.

a href ="/logout"

- 스프링 시큐리티에서 긱본적으로 제공하는 로그아웃 url

- SecurityConfig 클래스에서 url을 변경할 순 있지만 개발자가 별도로 저 url에 해당하는 컨트롤러를 만들지 않아도 된다는 소리

 

SessionUser user = (SessionUser) httpSession.getAttribute("user"); // CustomOAuth2UserService에서 로그인 성공 시 세션에 SessionUser를 저장하도록 구성했다.
// 즉 로그인 성공 시 httpSession.getAttribute("user")에서 값을 가져올 수 있다.
if (user != null) { // 세션에 저장된 값이 있을 때만 model에 userName으로 등록한다.
    model.addAttribute("userName", user.getName());
}

 

728x90
반응형