Form 로그인이면 (일반 로그인) UserDetailsService의 loadUserByUsername 메서드가 실행
OAuth2 로그인이면 (페이스북 로그인) OAuth2UserService의 loadUser 메서드가 실행
각 메소드는 "이런 정보가 들어왔는데 얘 혹시 회원이야? 찾아볼까?”
이 로직만 구현하면 된다
이때, 회원정보는 Form 로그인이면 UserDetails타입으로, OAuth2 로그인이면 OAuth2User타입으로 반환
1번 2번 모두 같은 객체로 세션에 저장되어 접근 할 수 있도록 PrincipalDetails 클래스 생성)
UserDetails
OAuth2User
를 상속받은 받아 직접 구현한 구현체가 바로 PrincipalDetails
public class PrincipalDetails implements UserDetails, OAuth2User {
private static final long serialVersionUID = 1L;
private User user;
public PrincipalDetails(User user) {
this.user = user;
}
/* Override Method... */
}
( Facebook 에 인증 코드 받음 ➡ 정보에 접근할 수 있는 Access Token 발급 ➡ Access Token으로 정보 요청 )➡ 응답된 정보로 회원가입 ➡ 로그인 성공
⇒ 밑줄 친 부분은 OAuth2 라이브러리가 자동으로 처리
OAuth2DetailsService