Browse Source

로그인시 기본정보 추가

- email
- 전화번호
- 전화번호(국가번호)
- 생일
pull/6/head
지대한 1 year ago
parent
commit
f559a34b45
  1. 9
      pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtRsModel.java
  2. 432
      pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/service/JwtService.java
  3. 52
      pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/service/JwtUserDetailsService.java
  4. 5
      pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrDtlRepository.java

9
pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/model/JwtRsModel.java

@ -1,6 +1,7 @@
package com.palnet.biz.api.acnt.jwt.model; package com.palnet.biz.api.acnt.jwt.model;
import java.io.Serializable; import java.io.Serializable;
import java.time.Instant;
import lombok.Data; import lombok.Data;
@ -16,6 +17,10 @@ public class JwtRsModel implements Serializable {
private Integer cstmrSno; private Integer cstmrSno;
private String auth; private String auth;
private Instant brthdyDate;
private String clncd;
private String hpno;
private String email;
} }

432
pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/service/JwtService.java

@ -1,238 +1,238 @@
package com.palnet.biz.api.acnt.jwt.service; package com.palnet.biz.api.acnt.jwt.service;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import com.palnet.biz.api.acnt.cstmr.service.AcntCstmrService;
import com.palnet.biz.api.acnt.jwt.model.JwtProfileRsModel; import com.palnet.biz.api.acnt.jwt.model.JwtProfileRsModel;
import com.palnet.biz.api.acnt.jwt.model.JwtRqModel; import com.palnet.biz.api.acnt.jwt.model.JwtRqModel;
import com.palnet.biz.api.acnt.jwt.model.JwtRsModel; import com.palnet.biz.api.acnt.jwt.model.JwtRsModel;
import com.palnet.biz.api.acnt.jwt.model.JwtUserModel; import com.palnet.biz.api.acnt.jwt.model.JwtUserModel;
import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil; import com.palnet.biz.api.acnt.jwt.utils.JwtTokenUtil;
import com.palnet.biz.api.comn.response.ErrorResponse;
import com.palnet.biz.api.comn.response.SuccessResponse;
import com.palnet.biz.jpa.entity.CtrCntrlBas;
import com.palnet.biz.jpa.entity.PtyCstmrBas; import com.palnet.biz.jpa.entity.PtyCstmrBas;
import com.palnet.biz.jpa.entity.PtyCstmrConectHist; import com.palnet.biz.jpa.entity.PtyCstmrConectHist;
import com.palnet.biz.jpa.repository.pty.PtyCstmrBasRepository; import com.palnet.biz.jpa.repository.pty.PtyCstmrBasRepository;
import com.palnet.biz.jpa.repository.pty.PtyCstmrConectHistRepository; import com.palnet.biz.jpa.repository.pty.PtyCstmrConectHistRepository;
import com.palnet.biz.jpa.repository.pty.PtyCstmrDtlRepository;
import com.palnet.biz.jpa.repository.pty.PtyCstmrQueryRepository; import com.palnet.biz.jpa.repository.pty.PtyCstmrQueryRepository;
import com.palnet.comn.code.ErrorCode; import com.palnet.comn.code.ErrorCode;
import com.palnet.comn.exception.CustomException; import com.palnet.comn.exception.CustomException;
import com.palnet.comn.utils.DateUtils;
import com.palnet.comn.utils.EncryptUtils; import com.palnet.comn.utils.EncryptUtils;
import com.palnet.comn.utils.HttpUtils; import com.palnet.comn.utils.HttpUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import lombok.extern.log4j.Log4j2; import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
@Slf4j
@RequiredArgsConstructor
@Service @Service
@Log4j2
public class JwtService { public class JwtService {
@Autowired
private PtyCstmrBasRepository ptyCstmrBasRepository; private final PtyCstmrBasRepository ptyCstmrBasRepository;
private final PtyCstmrDtlRepository ptyCstmrDtlRepository;
@Autowired private final PtyCstmrConectHistRepository ptyCstmrConectHistRepository;
private PtyCstmrConectHistRepository ptyCstmrConectHistRepository; private final JwtUserDetailsService userDetailsService;
private final PtyCstmrQueryRepository query;
@Autowired private final JwtTokenUtil jwtTokenUtil;
private JwtUserDetailsService userDetailsService;
/**
@Autowired * 로그인 처리
private PtyCstmrQueryRepository query ; *
* @param rq
@Autowired * @return
private JwtTokenUtil jwtTokenUtil; */
public Map<String, Object> loginProcess(JwtRqModel rq) throws Exception {
/**
* 로그인 처리 int loginError = 1; // -100 : 아이디/비밀번호가 없습니다 , -101 : 계정정보를 찾을수 없습니다 , -102 : 비밀번호가 잘못 되었습니다 , -103 : 계정을 사용할수 없습니다.
* @param rq
* @return Map<String, Object> resultMap = new HashMap<String, Object>();
*/
public Map<String , Object> loginProcess(JwtRqModel rq) throws Exception{ //입력값 검증 처리
if (StringUtils.isEmpty(rq.getUserId()) || StringUtils.isEmpty(rq.getUserPswd())) {
int loginError = 1; // -100 : 아이디/비밀번호가 없습니다 , -101 : 계정정보를 찾을수 없습니다 , -102 : 비밀번호가 잘못 되었습니다 , -103 : 계정을 사용할수 없습니다. loginError = -100;
}
Map<String , Object> resultMap = new HashMap<String , Object>();
JwtUserModel userDetails = (JwtUserModel) userDetailsService
//입력값 검증 처리 .loadUserByUsername(rq.getUserId());
if(StringUtils.isEmpty(rq.getUserId()) || StringUtils.isEmpty(rq.getUserPswd())) {
loginError = -100;
} //계정이 없는경우
if (userDetails == null) {
JwtUserModel userDetails = (JwtUserModel)userDetailsService loginError = -101;
.loadUserByUsername(rq.getUserId()); } else {
String password = EncryptUtils.sha256Encrypt(rq.getUserPswd());
//계정이 없는경우 //비밀번호 검증 처리
if(userDetails == null) { if (!userDetails.getPassword().equals(password)) {
loginError = -101; loginError = -102;
}else{
String password = EncryptUtils.sha256Encrypt(rq.getUserPswd()); }
//비밀번호 검증 처리 //계정 검증로직
if (!userDetails.getPassword().equals(password)) { if (!userDetails.isAccountNonLocked() || !userDetails.isAccountNonExpired() || !userDetails.isEnabled() || !userDetails.isCredentialsNonExpired()) {
loginError = -102; loginError = -103;
} }
}
//계정 검증로직
if(!userDetails.isAccountNonLocked() || !userDetails.isAccountNonExpired() || !userDetails.isEnabled() || !userDetails.isCredentialsNonExpired()) {
loginError = -103; if (loginError < 0) {
} String errorMessage = "";
} if (loginError == -100) {
errorMessage = "Please parameter Check";
} else if (loginError == -101) {
if(loginError < 0) { errorMessage = "Account not found";
String errorMessage = ""; } else if (loginError == -102) {
if(loginError == -100) { errorMessage = "Password does not match";
errorMessage = "Please parameter Check"; } else if (loginError == -103) {
}else if(loginError == -101) { errorMessage = "Account is unavailable";
errorMessage = "Account not found"; }
//실패 이력 저장
}else if(loginError == -102) { //cstmrSno , String loginYn , String errorCode
errorMessage = "Password does not match"; if (userDetails != null) {
}else if(loginError == -103) { this.historySave(userDetails.getCstmrSno(), "N", loginError + "");
errorMessage = "Account is unavailable"; }
}
//실패 이력 저장 resultMap.put("loginError", loginError);
//cstmrSno , String loginYn , String errorCode resultMap.put("errorMessage", errorMessage);
if(userDetails != null) {
this.historySave(userDetails.getCstmrSno(), "N", loginError+""); return resultMap;
}
} else {
resultMap.put("loginError", loginError);
resultMap.put("errorMessage", errorMessage); String accessToken = jwtTokenUtil.generateToken(userDetails);
String refreshToken = jwtTokenUtil.generateRefreshToken(userDetails);
return resultMap;
JwtRsModel result = new JwtRsModel();
}else { result.setAccessToken(accessToken);
result.setRefreshToken(refreshToken);
String accessToken = jwtTokenUtil.generateToken(userDetails); result.setAuth(userDetails.getAuth());
String refreshToken = jwtTokenUtil.generateRefreshToken(userDetails); result.setUserId(userDetails.getUserId());
result.setCstmrSno(userDetails.getCstmrSno());
JwtRsModel result = new JwtRsModel();
result.setAccessToken(accessToken); ptyCstmrDtlRepository.findById(userDetails.getCstmrSno()).ifPresent(ptyCstmrDtl -> {
result.setRefreshToken(refreshToken); result.setClncd(ptyCstmrDtl.getClncd());
result.setAuth(userDetails.getAuth()); result.setHpno(ptyCstmrDtl.getHpno());
result.setUserId(userDetails.getUserId()); result.setEmail(ptyCstmrDtl.getEmail());
result.setCstmrSno(userDetails.getCstmrSno()); result.setBrthdyDate(ptyCstmrDtl.getBrthdyDate());
//토큰 저장 처리 });
log.debug("========= refresh>>>>" + refreshToken);
this.refreshTokenSave(userDetails.getCstmrSno(), refreshToken); //토큰 저장 처리
log.debug("========= refresh>>>>" + refreshToken);
//성공이력 저장 this.refreshTokenSave(userDetails.getCstmrSno(), refreshToken);
this.historySave(userDetails.getCstmrSno(), "Y", loginError+"");
//성공이력 저장
resultMap.put("loginError", loginError); this.historySave(userDetails.getCstmrSno(), "Y", loginError + "");
resultMap.put("errorMessage", "");
resultMap.put("result", result); resultMap.put("loginError", loginError);
resultMap.put("errorMessage", "");
return resultMap; resultMap.put("result", result);
}
return resultMap;
} }
public PtyCstmrBas logoutProcess(int cstmrSno) throws Exception{ }
Optional<PtyCstmrBas> optional = ptyCstmrBasRepository.findById(cstmrSno); public PtyCstmrBas logoutProcess(int cstmrSno) throws Exception {
if (optional.isPresent()) {
PtyCstmrBas entity = optional.get(); Optional<PtyCstmrBas> optional = ptyCstmrBasRepository.findById(cstmrSno);
entity.setRfrshToken(""); if (optional.isPresent()) {
return ptyCstmrBasRepository.save(entity); PtyCstmrBas entity = optional.get();
}else { entity.setRfrshToken("");
return null; return ptyCstmrBasRepository.save(entity);
} } else {
return null;
} }
}
/**
* 로그인 이력 저장
* @param cstmrSno /**
* @param loginYn * 로그인 이력 저장
* @param errorCode *
* @return * @param cstmrSno
* @throws Exception * @param loginYn
*/ * @param errorCode
public PtyCstmrConectHist historySave(int cstmrSno , String loginYn , String errorCode) throws Exception{ * @return
String conectIp = HttpUtils.getRequestIp(); * @throws Exception
*/
PtyCstmrConectHist entity = new PtyCstmrConectHist(); public PtyCstmrConectHist historySave(int cstmrSno, String loginYn, String errorCode) throws Exception {
entity.setCstmrSno(cstmrSno); String conectIp = HttpUtils.getRequestIp();
entity.setConectSucesYn(loginYn);
entity.setConectErrorCd(errorCode); PtyCstmrConectHist entity = new PtyCstmrConectHist();
entity.setConectIp(conectIp); entity.setCstmrSno(cstmrSno);
entity.setConectDt(Instant.now()); entity.setConectSucesYn(loginYn);
return ptyCstmrConectHistRepository.save(entity); entity.setConectErrorCd(errorCode);
} entity.setConectIp(conectIp);
entity.setConectDt(Instant.now());
/** return ptyCstmrConectHistRepository.save(entity);
* refresh Token 저장 처리 }
* @param cstmrSno
* @param refreshToken /**
* @return * refresh Token 저장 처리
* @throws Exception *
*/ * @param cstmrSno
public PtyCstmrBas refreshTokenSave(int cstmrSno , String refreshToken) throws Exception{ * @param refreshToken
* @return
Optional<PtyCstmrBas> optional = ptyCstmrBasRepository.findById(cstmrSno); * @throws Exception
*/
if (!optional.isPresent()) { public PtyCstmrBas refreshTokenSave(int cstmrSno, String refreshToken) throws Exception {
throw new CustomException(ErrorCode.DATA_NOTFIND);
} Optional<PtyCstmrBas> optional = ptyCstmrBasRepository.findById(cstmrSno);
PtyCstmrBas entity = optional.get(); if (!optional.isPresent()) {
entity.setRfrshToken(refreshToken); throw new CustomException(ErrorCode.DATA_NOTFIND);
}
return ptyCstmrBasRepository.save(entity);
} PtyCstmrBas entity = optional.get();
entity.setRfrshToken(refreshToken);
/**
* 프로필 조회 return ptyCstmrBasRepository.save(entity);
* @param cstmrSno }
* @return
* @throws Exception /**
*/ * 프로필 조회
public JwtProfileRsModel profile(int cstmrSno) throws Exception{ *
JwtProfileRsModel model = query.findUserProfile(cstmrSno); * @param cstmrSno
* @return
* @throws Exception
*/
public JwtProfileRsModel profile(int cstmrSno) throws Exception {
JwtProfileRsModel model = query.findUserProfile(cstmrSno);
// model.setMemberName(EncryptUtils.decrypt(model.getMemberName())); // model.setMemberName(EncryptUtils.decrypt(model.getMemberName()));
return model; return model;
} }
/** /**
* token 만료시 refresh 토큰으로 재검색 * token 만료시 refresh 토큰으로 재검색
* @param cstmrSno *
* @param refreshToken * @param cstmrSno
* @return * @param refreshToken
*/ * @return
public JwtRsModel findRefreshtoken(int cstmrSno , String refreshToken) { */
JwtUserModel userDetails = query.findRefreshtoken(cstmrSno, refreshToken); public JwtRsModel findRefreshtoken(int cstmrSno, String refreshToken) {
JwtUserModel userDetails = query.findRefreshtoken(cstmrSno, refreshToken);
if(userDetails == null) {
return null; if (userDetails == null) {
} return null;
}
String accessToken = jwtTokenUtil.generateToken(userDetails);
String accessToken = jwtTokenUtil.generateToken(userDetails);
JwtRsModel result = new JwtRsModel();
result.setAccessToken(accessToken); JwtRsModel result = new JwtRsModel();
result.setRefreshToken(refreshToken); result.setAccessToken(accessToken);
result.setAuth(userDetails.getAuth()); result.setRefreshToken(refreshToken);
result.setUserId(userDetails.getUserId()); result.setAuth(userDetails.getAuth());
result.setCstmrSno(userDetails.getCstmrSno()); result.setUserId(userDetails.getUserId());
result.setCstmrSno(userDetails.getCstmrSno());
return result;
} return result;
}
} }

52
pav-server/src/main/java/com/palnet/biz/api/acnt/jwt/service/JwtUserDetailsService.java

@ -1,41 +1,29 @@
package com.palnet.biz.api.acnt.jwt.service; package com.palnet.biz.api.acnt.jwt.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import com.palnet.biz.api.acnt.jwt.model.JwtUserModel; import com.palnet.biz.api.acnt.jwt.model.JwtUserModel;
import com.palnet.biz.jpa.repository.pty.PtyCstmrBasRepository;
import com.palnet.biz.jpa.repository.pty.PtyCstmrQueryRepository; import com.palnet.biz.jpa.repository.pty.PtyCstmrQueryRepository;
import com.palnet.comn.utils.JsonUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Service;
@Slf4j
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Log4j2 public class JwtUserDetailsService implements UserDetailsService {
public class JwtUserDetailsService implements UserDetailsService{
private final PtyCstmrQueryRepository query;
@Autowired
private PtyCstmrQueryRepository query ; @Override
public JwtUserModel loadUserByUsername(String username) {
@Autowired
private PtyCstmrBasRepository repository; JwtUserModel model = query.findUserPassword(username);
if (model == null) {
return null;
@Override } else {
public JwtUserModel loadUserByUsername(String username){ return model;
}
JwtUserModel model = query.findUserPassword(username);
// log.debug("jwtUser>>>>" + JsonUtils.toJson(model)); }
if(model == null) {
return null;
}else {
return model;
}
}
} }

5
pav-server/src/main/java/com/palnet/biz/jpa/repository/pty/PtyCstmrDtlRepository.java

@ -1,12 +1,9 @@
package com.palnet.biz.jpa.repository.pty; package com.palnet.biz.jpa.repository.pty;
import com.palnet.biz.jpa.entity.PtyCstmrDtl;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.palnet.biz.jpa.entity.CtrCntrlBas;
import com.palnet.biz.jpa.entity.PtyCstmrDtl;
import com.palnet.biz.jpa.entity.PtyTermsBas;
@Repository @Repository
public interface PtyCstmrDtlRepository extends JpaRepository<PtyCstmrDtl, Integer>{ public interface PtyCstmrDtlRepository extends JpaRepository<PtyCstmrDtl, Integer>{

Loading…
Cancel
Save