package com.rest.api.entity; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.rest.api.entity.common.CommonDateEntity; import lombok.*; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import javax.persistence.*; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @Builder // builder를 사용할수 있게 합니다. @Entity // jpa entity임을 알립니다. @Getter // user 필드값의 getter를 자동으로 생성합니다. @Setter @NoArgsConstructor // 인자없는 생성자를 자동으로 생성합니다. @AllArgsConstructor // 인자를 모두 갖춘 생성자를 자동으로 생성합니다. @Table(name = "user") // 'user' 테이블과 매핑됨을 명시 @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) // Post Entity에서 User와의 관계를 Json으로 변환시 오류 방지를 위한 코드 public class User extends CommonDateEntity implements UserDetails { @Id // pk @GeneratedValue(strategy = GenerationType.IDENTITY) private Long msrl; @Column(nullable = false, unique = true, length = 50) private String uid; @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) @Column(length = 100) private String password; @Column(nullable = false, length = 100) private String name; @Column(length = 100) private String provider; @ElementCollection(fetch = FetchType.EAGER) @Builder.Default private List roles = new ArrayList<>(); @Override public Collection getAuthorities() { return this.roles.stream().map(SimpleGrantedAuthority::new).collect(Collectors.toList()); } @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) @Override public String getUsername() { return this.uid; } @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) @Override public boolean isAccountNonExpired() { return true; } @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) @Override public boolean isAccountNonLocked() { return true; } @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) @Override public boolean isCredentialsNonExpired() { return true; } @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) @Override public boolean isEnabled() { return true; } }