스프링 시큐리티는 막강한 인증, 인가 기능을 가진 프레임 워크이다
이번장에서는 스프링 시큐리티와 OAuth을 구현한 구글 로그인을 연동하여 로그인 기능을 만들어 보는 연습을 할것이다.
이전에 Node.js 를 이용해 캡스톤 디자인을 하면서 한 프로젝트에서Node.js 연습 겸 카카오 로그인 까지 구현해 본적이 있었다. 그러면서 느꼈던점은 카카오 로그인 기능을 사용하면 매우 간단하게 로그인 기능을 구현이 가능하고 클라이언트 입장에서도 회원가입을 따로 안해도 되니까 편하겠다 라는 생각을 하게 되었었다.
책에 구글 서비스 등록 방법은 자세히 나와있으므로 생략
User클래스
id
, email
(null = false), picture
(null = false)을 컬럼으로 만들어주고 builder를 통해 생성자를 만들어준다.@Enumerated(EnumType.STRING)
: JPA로 데이터 베이스 저장시 Enum 값이 어떤 형태로 저장될지 결정.Role 클래스
config.auth 패키지
config/auth/SecurityConfig
@EnableWebSecurity
@csrf().disable().headers().frameOptions().disable()
@authorizeRequests
@antMatchers
@anyRequest
CustomOAuth2UserService
registrationId
-> 우리가 지금은 구글을 통해서만 구현을 하고 있지만 앞으로 네이버를 통해서도 구현을 할것이기 때문에 어떤 소셜을 통해 로그인을 했는지 구분 하기 위해 사용한다.
userNameAttributeName
-> OAuth2의 로그인을 진행 시 키가 되는 필드 값(primary key)
OAuthAttributes
-> OAuth2UserService 를통해 가져온 attribute를 담은 클래스
위 코드에는 생소한 메소드와 객체가 많이 나오는데 다음 dto 를 보면 조금은 이해가 간다.
OAuthAttributes
OAuthAttributes
이다 위에서 OAuth2UserService 를 통해 가져온 attribute를 담은 클래스라 했는데 코드를 보면 of 안에서 registrationId
를 통해 naver
와 google
두가지를 판별해 다른 메서드로 연결을 해준다. 이후 각 소셜 로그인에 맞는 attribute를 처리 해준다.