[Security] 시큐리티 프로젝트 로그인 - 로그인 인증방식 통합
https://oneseok.tistory.com/65
[Security] 시큐리티 프로젝트 로그인 - OAuth 로그인_naver
https://oneseok.tistory.com/64 [Security] 시큐리티 프로젝트 로그인 - OAuth 로그인_google https://oneseok.tistory.com/63 [Security] 시큐리티 프로젝트 로그인 - 회원가입 및 기본로그인 https://oneseok.t..
oneseok.tistory.com
저번 시간에는 provider를 제공하지 않는 naver의 경우 어떻게 로그인 하는지에 대해 알아 보았다.
yml에서 직접 provider를 만들고 구글과 달리 결과값이 다른곳에 들어 있어 인터페이스를 만들고 그 인터페이스를 각각OAuth 주체마다 구현클래스를 만들어 처리하였다.
이번시간에는 일반로그인 과 OAuth로그인의 인증방식 통합을 위해 OAuth로그인 결과도 PrincipalDetails 객체로 만들어 Authentication 객체에 넣으려고 한다.
1. PrincipalDetails 클래스로 "OAuth2User 인터페이스 구현하기
- 해당 OAuth2User 인터페이스를 implements 한다.
- attributes 필드와 생성자를 하나 만들어야한다. 왜냐하면 구현해야할 메소드 중에 리턴타입이 Map인 메소드가 있기때문이다.(getAttributes)
- PrincipalOAuth2UserService의 리턴을 사진과 같이 바꾼다.
- PrincipalOAuth2UserService 리턴타입은 "OAuth2User" 라 상속받은 PrincipalDetails 로 바꿀 수가 있다.
2. Controller 에서 인증 객체 받아보기
- 일반 로그인한 유저나 OAuth로그인한 유저나 똑같히 Authentication객체안에 UserDetails를 상속받은 PrincipaDetails 객체가 들어가 있으니 이렇게 받으면 된다.
- /user 로 접속해보면 아래와 같이 표시된다.
만약 이렇게 통합하지 않는다면 아래와같이 일반로그인한 사람 따로 소셜로그인한 사람 따로 컨트롤러를 만들어야하는 불상사가 발생한다... 이건 진짜 최악이고 사실상 서비스 할 수 없는 형태이다.
이번시간은 여기서 마치고 다음 시간부터는 JWT 에 대해서 한번 시도해 볼 것이다.