package com.takensoft.cms.mber.vo; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; /** * @author : takensoft * @since : 2024.04.01 * @modification * since | author | description * 2024.04.01 | takensoft | 최초 등록 * * 회원 정보 관련 VO * UserDetails : security 사용을 위해 상속 * Serializable : 직렬화를 위해 상속 */ @Setter @Getter @NoArgsConstructor @AllArgsConstructor public class MberVO implements UserDetails, Serializable { private static final long serialVersionUID = 1L; private String mbrId; // 회원 아이디 private String lgnId; // 로그인 아이디 private String mbrNm; // 회원 이름 private String ncnm; // 닉네임 private String pswd; // 비밀번호 private String mblTelno; // 휴대폰번호 private String telno; // 전화번호 private String eml; // 이메일 private String zip; // 우편번호 private String addr; // 주소 private String daddr; // 상세주소 private String mbrStts; // 회원상태 0: 탈퇴, 1: 승인, 2: 승인대기, 3: 차단 private boolean useYn; // 사용여부 private String cntrlDt; // 차단일 private String cntrlRsn; // 차단사유 private String smsRcptnAgreYn; // 문자수신여부 0: 거부, 1: 허용 private String emlRcptnAgreYn; // 이메일수신여부 0: 거부, 1: 허용 private String prvcRlsYn; // 개인정보공개여부 0: 거부, 1: 허용 private String mbrType; // 회원형태 S: 시스템, K: 카카오, N: 네이버, G: 구글, F: 페이스북 private String pswdChgDt; // 비밀번호 변경일 private String frstRegIp; // 최초등록 아이디 private String sysPvsnYn; // 시스템 제공 여부 -> 시스템에서 제공되는 데이터는 사용자가 제거하지 못하도록 하기 위한 설정값 0: 시스템, 1: 사용자 private String rgtr; // 등록자 private String regDt; // 등록일 private String mdfr; // 수정자 private String mdfcnDt; // 수정일 @JsonIgnore private List authorList = new ArrayList(); // 권한 정보 @Override public Collection getAuthorities() { if(this.authorList.size() > 0) { return this.authorList.stream().map(auth -> new SimpleGrantedAuthority( auth.getAuthrtCd() )).collect(Collectors.toList()); } else { return null; } } @Override public String getPassword() { return this.pswd; } @Override public String getUsername() { return this.lgnId; } @Override public boolean isAccountNonExpired() { return this.useYn; } @Override public boolean isAccountNonLocked() { return this.useYn; } @Override public boolean isCredentialsNonExpired() { return this.useYn; } @Override public boolean isEnabled() { return this.useYn; } // JWT 필터용 생성자 public MberVO(String mbrId, String lgnId, List authorList) { this.mbrId = mbrId; this.lgnId = lgnId; this.authorList = authorList; } // 토큰 재발행용 public MberVO(String mbrId, String lgnId, String mbrNm, List authorList) { this.mbrId = mbrId; this.lgnId = lgnId; this.mbrNm = mbrNm; this.authorList = authorList; } }