첫번째 - 구글 로그인 진행 시 후처리 만들기
1.패키지 생성 = oauth
2.CLASS 생성 = PrincipalOauth2UserSerivce
3.PrincipalOauth2UserSerivce CLASS 작성
@Service
public class PrincipalOauth2UserService extends DefaultOAuth2UserService{
}
4.SecurityConfig CLASS -> 코드 추가
@Autowired
private PrincipalOauth2UserService principalOauth2UserService;
.userInfoEndpoint()
.userService(principalOauth2UserService);
5.PrincipalOauth2UserSerivce CLASS -> 코드 추가
:이제 로그인하고 나서 어떻게 처리할지는 여기서 정의하면 됨
:스프링부트 Restart 한 번하고 구글로그인하면 Console에 여러 정보들이 찍힘
package com.goodbam.security1.config.oauth;
import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService;
import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest;
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Service;
@Service
public class PrincipalOauth2UserService extends DefaultOAuth2UserService{
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
System.out.println("getClientRegistration : " + userRequest.getClientRegistration());
System.out.println("getClientRegistration.getClientName() : " + userRequest.getClientRegistration().getClientName());
System.out.println("getAccessToken : " + userRequest.getAccessToken().getTokenValue());
System.out.println("getAttributes : " + super.loadUser(userRequest).getAttributes());
return super.loadUser(userRequest);
}
}
두번째 - 일반 로그인과 간편 로그인 묶기
흐름 정리
-세션 안에 스프링 시큐리티가 관리하는 자기만에 세션이 따로 있음
-시큐리티 세션에 들어갈 수 있는 타입은 Authentication 객체밖에 없음
-Authentication 객체에 들어갈 수 있는 타입은 2가지임
1.UserDetails 타입
:일반 회원가입 절차를 걸쳐 로그인하는 경우 사용됨
2.OAuth2User 타입
:구글로 간편 로그인하는 경우 사용됨
문제 사항
-회원가입 진행시 User 타입이 필요함
-UserDetails(일반 로그인) 타입과 OAuth2User(간편 로그인) 타입은 User 타입을 들고 있지 않음
-일반 로그인과 간편 로그인(구글 로그인)이 각각 데이터 타입이 다름
해결방안
-UserDetails 타입과 OAuth2User 타입을 하나의 클래스로 묶어서 만듬
1.PrincipalDetails CLASS -> 어노테이션 추가
2.PrincipalDetails CLASS -> OAuth2User 추가
세번째 - 구글 로그인으로 회원가입 진행
1.PrincipalDetails CALSS -> 전역 변수 추가
2.PrincipalDetails CALSS -> 생성자 추가
3.PrincipalDetails CALSS -> getAttributes METHOD -> return 값 변경
4.PrincipalOauth2UserService CLASS -> 전역 변수 추가
5.PrincipalOauth2UserService CLASS -> 전역 변수 추가
6.PrincipalOauth2UserService CLASS -> loadUser METHOD 수정
7-1.User CLASS -> 생성자 추가
7-2.User CLASS -> id 체크 풀고 Generate
7-3.User CLASS -> @Builder 어노테이션 추가 Super() 삭제
7-4.User CLASS -> @NoArgsConstructor 어노테이션 추가
8.PrincipalOauth2UserService CLASS -> loadUser METHOD 수정
:이미 회원가입이 되어 있는지 확인하고 안되어 있으면 회원가입 완료
-끝-
'Spring Boot > Security' 카테고리의 다른 글
[SpringBoot Secyruty] 구글 로그인 (1) (0) | 2022.04.23 |
---|---|
[SpringBoot Secyruty] 권한 처리 (0) | 2022.04.22 |
[SpringBoot Secyruty] 환경 설정 (0) | 2022.04.22 |
[SpringBoot Security] 로그인 페이지 만들기 (0) | 2022.04.22 |
[SpringBoot Secyruty] 회원가입 페이지 만들기 (0) | 2022.04.20 |