DB 관련 의존성 주석 해제
- build.gradle
dependencies {
//implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
//runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
}
DB 연결 변수 작성
- application.properties
# DB 설정
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/oauth2
spring.datasource.username=root
spring.datasource.password=!123456
spring.jpa.hibernate.ddl-auto=none
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
UserEntity 생성
- entity > UserEntity
@Entity
@Getter
@Setter
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String email;
private String role;
}
UserRepository 생성
- repository > UserRepository
public interface UserRepository extends JpaRepository<UserEntity, Long> {
UserEntity findByUsername(String username);
}
CustomOAuth2UserService 유저 정보 DB 저장 로직 작성
- service > CustomOAuth2UserService
@Service
public class CustomOAuth2UserService extends DefaultOAuth2UserService {
//DefaultOAuth2UserService OAuth2UserService의 구현체
private final UserRepository userRepository;
public CustomOAuth2UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
OAuth2User oAuth2User = super.loadUser(userRequest);
System.out.println(oAuth2User.getAttributes());
// Naver 또는 Google.. 어떤 인증 provide 인지에 대한 변수를 담아옴
String registrationId = userRequest.getClientRegistration().getRegistrationId();
OAuth2Response oAuth2Response = null;
if (registrationId.equals("naver")) {
oAuth2Response = new NaverResponse(oAuth2User.getAttributes());
} else if (registrationId.equals("google")) {
oAuth2Response = new GoogleResponse(oAuth2User.getAttributes());
} else {
return null;
}
String username = oAuth2Response.getProvider() + " " + oAuth2Response.getProviderId();
UserEntity existData = userRepository.findByUsername(username);
String role = "ROLE_USER";
if (existData == null) {
UserEntity userEntity = new UserEntity();
userEntity.setUsername(username);
userEntity.setEmail(oAuth2Response.getEmail());
userEntity.setRole("ROLE_USER");
userRepository.save(userEntity);
} else {
role = existData.getRole();
existData.setEmail(oAuth2Response.getEmail());
userRepository.save(existData);
}
return new CustomOAuth2User(oAuth2Response, role);
}
}
출처
'Spring Security > OAuth2' 카테고리의 다른 글
스프링 OAuth2 클라이언트 세션 11 : 커스텀 로그인 페이지 (0) | 2025.01.09 |
---|---|
스프링 OAuth2 클라이언트 세션 : 로그인 및 DB 저장 테스트 (0) | 2025.01.09 |
스프링 OAuth2 클라이언트 세션 9 : 응답 데이터로 로그인 완료 (0) | 2025.01.08 |
스프링 OAuth2 클라이언트 세션 8 : OAuth2UserService 응답 받기 (0) | 2025.01.08 |
스프링 OAuth2 클라이언트 세션 7 : 구글 소셜 로그인 신청 (0) | 2025.01.08 |