SpringBoot

스프링 시큐리티를 사용한 소셜로그인(Google) 기능구현 3

심나라 2022. 10. 8. 21:02
728x90

 

SpringBoot에서 스프링 시큐리티를 사용하여 소셜로그인 기능을 구현합니다.

 

구글의 로그인 인증정보를 발급 받았으니, 사용자 정보를 담당할 도메인인 User 클래스를 생성합니다. 

package com.shimnara.ksshim.springboot.domain.user;

import com.shimnara.ksshim.springboot.domain.BaseTimeEntity;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Getter
@NoArgsConstructor
@Entity
public class User extends BaseTimeEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private String email;

    @Column
    private String picture;

    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private Role role;

    @Builder
    public User(String name, String email, String picture, Role role) {
        this.name = name;
        this.email = email;
        this.picture = picture;
        this.role = role;
    }

    public User update(String name, String picture) {
        this.name = name;
        this.picture = picture;

        return this;
    }

    public String getRoleKey() {
        return this.role.getKey();
    }

}

 

@Enumerated(EnumTypes.STRING)

  • JPA로 데이터베이스로 저장할 때 Enum 값을 어떤 형태로 저장할지 결정합니다.
  • 기본적으로 int로 된 숫잘르 저장합니다.
  • 숫자로 저장되면 DB를 확인할 때 그 값이 무슨 코드를 의미하는지 알 수가 없습니다.
  • 그래서 문자열(EnumTypes.STRING)로 저장될 수 있도록 선언합니다. 

 

 

각 사용자의 권한을 관리할 Enum 클래스 Role 을 생성합니다. 

package com.shimnara.ksshim.springboot.domain.user;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum Role {
    GUEST("ROLE_GUEST", "손님"),
    USER("ROLE_USER", "일반 사용자");

    private final String key;
    private final String title;
}

스프링 시큐리티에서는 권한 코드에 항상 ROLE_ 이 앞에 있어야 합니다. 그래서 코드별 키 값을 ROLE-GUEST, ROLE_USER 등으로 지정합니다. 

 

User의 CRUD를 책임질 UserRepository 클래스도 생성합니다. 

package com.shimnara.ksshim.springboot.domain.user;

import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByEmail(String email);
}

findByEmail

  • 소셜 로그인으로 반환되는 값 중 email을 통해 이미 가입된 사용자인지 처음 가입하는 사용자인지 판단하기 위한 메소드 입니다. 

 

 

  1. 스프링 시큐리티를 사용한 소셜로그인(Google) 기능구현 1
  2. 스프링 시큐리티를 사용한 소셜로그인(Google) 기능구현 2
  3. 스프링 시큐리티를 사용한 소셜로그인(Google) 기능구현 3
  4. 스프링 시큐리티를 사용한 소셜로그인(Google) 기능구현 4
  5. 스프링 시큐리티를 사용한 소셜로그인(Google) 기능구현 5
  6. 스프링 시큐리티를 사용한 소셜로그인(Google) 기능구현 6
  7. 스프링 시큐리티를 사용한 소셜로그인(Google) 기능구현 7

 

 

  • [참고자료]
    스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (이동욱 지음)

 

728x90