From 925f8b4ffca99f07c629660d42c48f531b4f77a0 Mon Sep 17 00:00:00 2001 From: wayne <wayne8692wayne8692@gmail.com> Date: 星期一, 21 二月 2022 18:17:14 +0800 Subject: [PATCH] [update] 移除login_record欄位,改統一放之後 將新開的稽核欄位"audit_logging",並在顧問欄位加開最後上線時間 --- /dev/null | 66 ---------------------- pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java | 4 - pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java | 10 --- pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java | 18 ++--- pamapi/src/doc/sql/20220221_w.sql | 21 +++++++ pamapi/src/main/java/com/pollex/pam/domain/Consultant.java | 11 +++ pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java | 5 - 7 files changed, 40 insertions(+), 95 deletions(-) diff --git a/pamapi/src/doc/sql/20220221_w.sql b/pamapi/src/doc/sql/20220221_w.sql new file mode 100644 index 0000000..2e24808 --- /dev/null +++ b/pamapi/src/doc/sql/20220221_w.sql @@ -0,0 +1,21 @@ +CREATE TABLE public.audit_logging ( + id bigserial NOT NULL, + functional_type varchar NULL, + "content" varchar NULL, + created_by varchar NULL, + created_date timestamp NULL, + CONSTRAINT audit_logging_pk PRIMARY KEY (id) +); + +ALTER TABLE public.consultant ADD latest_login_time timestamp NULL; + +update consultant set latest_login_time = (select login_date from login_record where account = 'A183619275' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'A183619275'; +update consultant set latest_login_time = (select login_date from login_record where account = 'AGAM11249699' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'AGAM11249699'; +update consultant set latest_login_time = (select login_date from login_record where account = 'Z152717443' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'Z152717443'; +update consultant set latest_login_time = (select login_date from login_record where account = 'D265260662' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'D265260662'; +update consultant set latest_login_time = (select login_date from login_record where account = 'AG0109051204' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'AG0109051204'; +update consultant set latest_login_time = (select login_date from login_record where account = 'B282677963' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'B282677963'; +update consultant set latest_login_time = (select login_date from login_record where account = 'AG0101234567' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'AG0101234567'; +update consultant set latest_login_time = (select login_date from login_record where account = 'X147309614' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'X147309614'; +update consultant set latest_login_time = (select login_date from login_record where account = 'J149388015' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'J149388015'; +update consultant set latest_login_time = (select login_date from login_record where account = 'R221444250' and login_method = 'E_SERVICE' and result = 'SUCCESS' order by login_date desc limit 1) where agent_no = 'R221444250'; diff --git a/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java b/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java index 401c42d..f3552b3 100644 --- a/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java +++ b/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java @@ -5,6 +5,7 @@ import javax.persistence.*; import java.io.Serializable; +import java.time.Instant; @Entity @Table(name = "consultant") @@ -79,6 +80,8 @@ @Column(name = "status") private ConsultantStatusEnum status; + @Column(name = "latest_login_time") + private Instant latestLoginTime; public Long getId() { return id; @@ -255,6 +258,14 @@ this.status = status; } + public Instant getLatestLoginTime() { + return latestLoginTime; + } + + public void setLatestLoginTime(Instant latestLoginTime) { + this.latestLoginTime = latestLoginTime; + } + @Override public String toString() { return "Consultant{" + diff --git a/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java b/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java deleted file mode 100644 index 42bce49..0000000 --- a/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.pollex.pam.domain; - -import com.pollex.pam.enums.LoginMethod; -import com.pollex.pam.enums.LoginResult; - -import javax.persistence.*; -import java.io.Serializable; -import java.time.Instant; - -@Entity -@Table(name = "login_record") -public class LoginRecord implements Serializable { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @Column(name = "account") - private String account; - - @Enumerated(EnumType.STRING) - @Column(name = "login_method") - private LoginMethod loginMethod; - - @Column(name = "login_date", updatable = false) - private Instant loginDate = Instant.now(); - - @Enumerated(EnumType.STRING) - @Column(name = "result") - private LoginResult result; - - @Column(name = "failed_reason") - private String failedReason; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getAccount() { - return account; - } - - public void setAccount(String account) { - this.account = account; - } - - public LoginMethod getLoginMethod() { - return loginMethod; - } - - public void setLoginMethod(LoginMethod loginMethod) { - this.loginMethod = loginMethod; - } - - public Instant getLoginDate() { - return loginDate; - } - - public void setLoginDate(Instant createdDate) { - this.loginDate = createdDate; - } - - public LoginResult getResult() { - return result; - } - - public void setResult(LoginResult result) { - this.result = result; - } - - public String getFailedReason() { - return failedReason; - } - - public void setFailedReason(String failedReason) { - this.failedReason = failedReason; - } - - @Override - public String toString() { - return "LoginRecord{" + - "id=" + id + - ", account='" + account + '\'' + - ", loginMethod=" + loginMethod + - ", createdDate=" + loginDate + - ", result=" + result + - ", failedReason='" + failedReason + '\'' + - '}'; - } -} diff --git a/pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java deleted file mode 100644 index 6d8f3ab..0000000 --- a/pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.pollex.pam.repository; - -import com.pollex.pam.domain.LoginRecord; -import com.pollex.pam.enums.LoginResult; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -public interface LoginRecordRepository extends JpaRepository<LoginRecord, Long> { - Optional<LoginRecord> findTopByAccountAndResultOrderByLoginDateDesc(String account, LoginResult loginResult); -} diff --git a/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java b/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java index a5b9aaa..8b12535 100644 --- a/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java +++ b/pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java @@ -4,10 +4,8 @@ import com.pollex.pam.config.ApplicationProperties; import com.pollex.pam.domain.Consultant; import com.pollex.pam.enums.ConsultantDetailEnum; -import com.pollex.pam.enums.ConsultantStatusEnum; import com.pollex.pam.repository.ConsultantRepository; import com.pollex.pam.security.token.EServiceAuthenticationToken; -import com.pollex.pam.service.LoginRecordService; import com.pollex.pam.service.dto.EServiceResponse; import com.pollex.pam.web.rest.errors.ConsultantDisableException; import com.pollex.pam.web.rest.errors.EServiceErrorException; @@ -39,6 +37,7 @@ import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; +import java.time.Instant; import java.util.*; import static com.pollex.pam.enums.ConsultantStatusEnum.DISABLE; @@ -55,16 +54,12 @@ @Autowired ConsultantRepository consultantRepository; - @Autowired - LoginRecordService loginRecordService; - public Authentication authenticate(EServiceAuthenticationToken authenticationToken) throws AuthenticationException { String account = authenticationToken.getPrincipal(); String credentials = authenticationToken.getCredentials(); if(applicationProperty.isMockLogin()){ - loginRecordService.saveEServiceLoginSuccessRecord(account); - return getConsultantToken(account, credentials); + return getConsultantTokenAndRecordLoginTime(account, credentials); } try { @@ -74,11 +69,9 @@ log.debug("eService response = {}", eServiceResponse); if(E_SERVICE_LOGIN_SUCCESS_CODE.equals(eServiceResponse.getIssuccess())){ - loginRecordService.saveEServiceLoginSuccessRecord(account); - return getConsultantToken(account, credentials); + return getConsultantTokenAndRecordLoginTime(account, credentials); } else { - loginRecordService.saveEServiceLoginFailRecord(account, eServiceResponse.getMsg()); throw new EServiceErrorException(eServiceResponse.getMsg()); } } @@ -91,13 +84,16 @@ } } - private UsernamePasswordAuthenticationToken getConsultantToken(String account, String credential) throws ConsultantDisableException { + private UsernamePasswordAuthenticationToken getConsultantTokenAndRecordLoginTime(String account, String credential) throws ConsultantDisableException { Consultant consultant = consultantRepository.findOneByAgentNo(account).orElseThrow(() -> new UsernameNotFoundException("閰脤“����蒂銝��慦�像�蝟餌絞銝�")); if(consultant.getStatus() == DISABLE) { throw new ConsultantDisableException("憿批�董�����銝�"); } + consultant.setLatestLoginTime(Instant.now()); + consultantRepository.save(consultant); + List<GrantedAuthority> grantedAuths = Arrays.asList(new SimpleGrantedAuthority("ROLE_USER")); UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(account, credential, grantedAuths); diff --git a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java index 58c96d9..246eef7 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java +++ b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java @@ -61,9 +61,6 @@ AppointmentService appointmentService; @Autowired - LoginRecordService loginRecordService; - - @Autowired AppointmentCustomerViewMapper appointmentCustomerViewMapper; @Autowired @@ -225,12 +222,7 @@ public ConsultantDetailDTO getConsultantDetail(String agentNo) { Consultant consultant = consultantRepository.findOneByAgentNo(agentNo).orElseThrow(ConsultantNotFoundException::new); - ConsultantDetailDTO consultantDetailDTO = consultantMapper.toDetailDto(consultant); - - loginRecordService.findLatestLoginRecord(agentNo, LoginResult.SUCCESS) - .ifPresent(loginRecord -> consultantDetailDTO.setLatestLoginTime(loginRecord.getLoginDate())); - - return consultantDetailDTO; + return consultantMapper.toDetailDto(consultant); } @Transactional diff --git a/pamapi/src/main/java/com/pollex/pam/service/LoginRecordService.java b/pamapi/src/main/java/com/pollex/pam/service/LoginRecordService.java deleted file mode 100644 index 8c0b8c4..0000000 --- a/pamapi/src/main/java/com/pollex/pam/service/LoginRecordService.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.pollex.pam.service; - -import com.pollex.pam.domain.LoginRecord; -import com.pollex.pam.enums.LoginResult; -import com.pollex.pam.repository.LoginRecordRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.Optional; - -import static com.pollex.pam.enums.LoginMethod.E_SERVICE; -import static com.pollex.pam.enums.LoginMethod.OTP; -import static com.pollex.pam.enums.LoginResult.FAIL; -import static com.pollex.pam.enums.LoginResult.SUCCESS; - - -@Service -@Transactional -public class LoginRecordService { - - @Autowired - LoginRecordRepository loginRecordRepository; - - public Optional<LoginRecord> findLatestLoginRecord(String account, LoginResult loginResult) { - return loginRecordRepository.findTopByAccountAndResultOrderByLoginDateDesc(account, loginResult); - } - - public void saveOTPLoginSuccessRecord(String account) { - LoginRecord loginRecord = new LoginRecord(); - loginRecord.setAccount(account); - loginRecord.setLoginMethod(OTP); - loginRecord.setResult(SUCCESS); - - loginRecordRepository.save(loginRecord); - } - - public void saveOTPLoginFailRecord(String account, String failReason) { - LoginRecord loginRecord = new LoginRecord(); - loginRecord.setAccount(account); - loginRecord.setLoginMethod(OTP); - loginRecord.setResult(FAIL); - loginRecord.setFailedReason(failReason); - - loginRecordRepository.save(loginRecord); - } - - public void saveEServiceLoginSuccessRecord(String account) { - LoginRecord loginRecord = new LoginRecord(); - loginRecord.setAccount(account); - loginRecord.setLoginMethod(E_SERVICE); - loginRecord.setResult(SUCCESS); - - loginRecordRepository.save(loginRecord); - } - - public void saveEServiceLoginFailRecord(String account, String failReason) { - LoginRecord loginRecord = new LoginRecord(); - loginRecord.setAccount(account); - loginRecord.setLoginMethod(E_SERVICE); - loginRecord.setResult(FAIL); - loginRecord.setFailedReason(failReason); - - loginRecordRepository.save(loginRecord); - } -} diff --git a/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java b/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java index 868901a..9736d8e 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java +++ b/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java @@ -28,9 +28,6 @@ @Autowired OtpTmpService otpTmpService; - @Autowired - LoginRecordService loginRecordService; - @Transactional public void verifyOtp(VerifyOtpVM verifyOtpParam) { verifyOtp(verifyOtpParam.getAccount(), verifyOtpParam.getIndexKey(), verifyOtpParam.getOtpCode()); @@ -47,11 +44,9 @@ } else { log.info("otp login fail... , account = {}, error code = {}, failReason = {}", account, otpResponseDTO.getFailCode(), otpResponseDTO.getFailReason()); - loginRecordService.saveOTPLoginFailRecord(account, otpResponseDTO.getFailReason()); throw new OtpLoginFailException(otpResponseDTO.getFailCode()); } } - loginRecordService.saveOTPLoginSuccessRecord(account); setVerrifiedOtpTmp(account, indexKey); } diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java index 947b621..0487285 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java @@ -2,7 +2,6 @@ import com.pollex.pam.config.ApplicationProperties; import com.pollex.pam.security.jwt.TokenProvider; -import com.pollex.pam.service.LoginRecordService; import com.pollex.pam.service.OtpWebService; import com.pollex.pam.service.dto.EServiceResponse; import com.pollex.pam.service.dto.OtpResponseDTO; @@ -41,9 +40,6 @@ public class TestLoginResource { private final static Logger log = LoggerFactory.getLogger(TestLoginResource.class); - - @Autowired - LoginRecordService loginRecordService; @Autowired ApplicationProperties applicationProperty; -- Gitblit v1.8.0