BE전문가 프로젝트

1. User Entity 생성(Spring Security) 본문

SpringBoot Security

1. User Entity 생성(Spring Security)

원호보고서 2023. 6. 25. 22:50

User(Entity) 생성

@Entity
@NoArgsConstructor
@Getter
@Builder
@AllArgsConstructor
public class User {

    @Id
    @GeneratedValue
    @Column(unique = true, nullable = false, name = "USER_ID")
    private long userId;

    @Column(unique = true, nullable = false, name = "EMAIL")
    private String email;

    @Column(name = "PASSWORD")
    private String password;

    @Column(name = "NICKNAME")
    private String nickname;

    @Column(name = "PROFILE_URL")
    private String profileUrl;

    @Column(name = "REFRESH_TOKEN", length = 1000)
    private String refreshToken;

    @Builder.Default
    @Column(name = "USER_ROLE")
    private String userRole = "ROLE_USER";

    @Enumerated(EnumType.STRING)
    @Column(name = "SOCIAL_TYPE")
    private SocialType socialType;

    @Column(name = "socialId")
    private String socialId; // 로그인한 소셜 타입의 식별자 값 (일반 로그인인 경우 null)

    // refreshToken 재설정
    public void updateRefreshToken(String refreshToken){
        this.refreshToken = refreshToken;
    }

    // 비밀번호 암호화
    public void passwordEncode(PasswordEncoder passwordEncoder){
        this.password = passwordEncoder.encode(this.password);
    }
}​

 Annotation

@Build.Default

  • Default값을 설정하고 싶을 때 @Builder를 사용하지 않고 생성자 형태로 구현한다면 해당 Annotation을 사용하지 않아도 되지만 Builder사용시 사용해야하는 annotation

@Enumerared(EnumType.STRING)

  • Enum사용시 값을 String 형태로 입력하고 싶다면 사용해야하며 해당 Annotaion을 사용하지 않는다면 문자열이 아닌 Int형태로 들어가기 때문에 Enum의 순서가 입력됨

 

※권한을 String 형태로 구현한 이유

- authorization(인가)를 구현하는 여러가지 방식이 있지만 UserDetails 구현 시 return 타입이 collection이기 때문에 String으로 구현했으며 해당 함수는 UserDetails를 구현 시 자세하게 설명할 예정

 

Method

UpdateRefreshToken

  • Jpa에서는 Setter사용을 지양하기 때문에(추적이 어렵기 때문) update 함수를 만들어 구현

passwordEncode

  • 패스워드를 암호화 하기 위해 사용하는 메소드

 

PasswordEncoder

@Configuration
public class CommonConfig {

    @Bean
    public BCryptPasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

}
  • BCryptPasswordEncoder 클래스를 Bean등록해준다.

 

Comments