지대한
1 year ago
4 changed files with 244 additions and 254 deletions
@ -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; |
||||||
|
} |
||||||
|
|
||||||
} |
} |
||||||
|
@ -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; |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
} |
} |
||||||
|
Loading…
Reference in new issue