From 4b1639583efdb417cdf9a999a74d6d17835cc252 Mon Sep 17 00:00:00 2001 From: wayne <wayne8692wayne8692@gmail.com> Date: 星期一, 29 十一月 2021 16:40:04 +0800 Subject: [PATCH] [add] 客戶、顧問登入紀錄 --- pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java | 13 ++ pamapi/src/main/java/com/pollex/pam/enums/LoginMethod.java | 6 + pamapi/src/main/java/com/pollex/pam/service/LoginRecordService.java | 66 +++++++++++ pamapi/src/main/java/com/pollex/pam/domain/Consultant.java | 13 -- pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java | 94 +++++++++++++++ pamapi/src/main/java/com/pollex/pam/enums/LoginResult.java | 6 + pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java | 11 + pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java | 5 /dev/null | 90 --------------- pamapi/src/doc/sql/20211129_w.sql | 11 + pamapi/src/main/java/com/pollex/pam/web/rest/TestLoginResource.java | 12 - pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java | 11 + pamapi/src/main/java/com/pollex/pam/security/provider/EServiceAuthenticationProvider.java | 16 +- pamapi/src/doc/顧問API/指定顧問詳細資訊.txt | 2 14 files changed, 230 insertions(+), 126 deletions(-) diff --git a/pamapi/src/doc/sql/20211129_w.sql b/pamapi/src/doc/sql/20211129_w.sql new file mode 100644 index 0000000..d35339b --- /dev/null +++ b/pamapi/src/doc/sql/20211129_w.sql @@ -0,0 +1,11 @@ +ALTER TABLE omo.consultant DROP COLUMN latest_login_time; + +CREATE TABLE omo.login_record ( + id bigserial NOT NULL, + account varchar NOT NULL, + login_method varchar NOT NULL, + login_date timestamp NOT NULL, + "result" varchar NOT NULL, + failed_reason varchar NULL, + CONSTRAINT login_record_pk PRIMARY KEY (id) +); diff --git "a/pamapi/src/doc/\351\241\247\345\225\217API/\351\241\247\345\225\217\347\264\260\347\257\200.txt" "b/pamapi/src/doc/\351\241\247\345\225\217API/\346\214\207\345\256\232\351\241\247\345\225\217\350\251\263\347\264\260\350\263\207\350\250\212.txt" similarity index 91% rename from "pamapi/src/doc/\351\241\247\345\225\217API/\351\241\247\345\225\217\347\264\260\347\257\200.txt" rename to "pamapi/src/doc/\351\241\247\345\225\217API/\346\214\207\345\256\232\351\241\247\345\225\217\350\251\263\347\264\260\350\263\207\350\250\212.txt" index d9b09c2..97b3fe6 100644 --- "a/pamapi/src/doc/\351\241\247\345\225\217API/\351\241\247\345\225\217\347\264\260\347\257\200.txt" +++ "b/pamapi/src/doc/\351\241\247\345\225\217API/\346\214\207\345\256\232\351\241\247\345\225\217\350\251\263\347\264\260\350\263\207\350\250\212.txt" @@ -11,7 +11,7 @@ "phoneNumber": "0912345678", "serveArea": "������", "companyAddress": "����縑蝢拙�敹�頝臭�畾�1���", - "latestLoginTime": null, + "latestLoginTime": "2021-11-29T07:39:22.135Z", // ����敺�蝝�����葆null "seniority": "4撟�2���", "suitability": 0, "evaluation": 0, 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 6fd2b42..890a849 100644 --- a/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java +++ b/pamapi/src/main/java/com/pollex/pam/domain/Consultant.java @@ -4,7 +4,6 @@ import javax.persistence.*; import java.io.Serializable; -import java.time.Instant; @Entity @Table(name = "consultant") @@ -50,9 +49,6 @@ @Column(name = "company_address") private String companyAddress; - - @Column(name = "latest_login_time") - private Instant latestLoginTime; @Column(name = "seniority") private String seniority; @@ -168,14 +164,6 @@ companyAddress = companyAddress; } - public Instant getLatestLoginTime() { - return latestLoginTime; - } - - public void setLatestLoginTime(Instant lastLoginTime) { - this.latestLoginTime = lastLoginTime; - } - public String getSeniority() { return seniority; } @@ -239,7 +227,6 @@ ", gender=" + gender + ", phoneNumber='" + phoneNumber + '\'' + ", companyAddress='" + companyAddress + '\'' + - ", latestLoginTime=" + latestLoginTime + ", seniority='" + seniority + '\'' + ", concept='" + concept + '\'' + ", experience='" + experience + '\'' + diff --git a/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java b/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java new file mode 100644 index 0000000..e74556b --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/domain/LoginRecord.java @@ -0,0 +1,94 @@ +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 { + + @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/enums/LoginMethod.java b/pamapi/src/main/java/com/pollex/pam/enums/LoginMethod.java new file mode 100644 index 0000000..836e852 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/enums/LoginMethod.java @@ -0,0 +1,6 @@ +package com.pollex.pam.enums; + +public enum LoginMethod { + OTP, + E_SERVICE +} diff --git a/pamapi/src/main/java/com/pollex/pam/enums/LoginResult.java b/pamapi/src/main/java/com/pollex/pam/enums/LoginResult.java new file mode 100644 index 0000000..562700d --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/enums/LoginResult.java @@ -0,0 +1,6 @@ +package com.pollex.pam.enums; + +public enum LoginResult { + SUCCESS, + FAIL +} diff --git a/pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java b/pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java new file mode 100644 index 0000000..525ee85 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/repository/LoginRecordRepository.java @@ -0,0 +1,13 @@ +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> findTopByAccountAndResultOrderByLoginDate(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 0f7db32..a23c399 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 @@ -1,14 +1,12 @@ package com.pollex.pam.security.provider; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.pollex.pam.config.ApplicationProperties; import com.pollex.pam.domain.Consultant; import com.pollex.pam.enums.ConsultantDetailEnum; -import com.pollex.pam.enums.CustomerDetailEnum; import com.pollex.pam.repository.ConsultantRepository; import com.pollex.pam.security.token.EServiceAuthenticationToken; -import com.pollex.pam.service.dto.EServiceRequest; +import com.pollex.pam.service.LoginRecordService; import com.pollex.pam.service.dto.EServiceResponse; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; @@ -22,7 +20,6 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException; import org.springframework.security.authentication.AuthenticationServiceException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; @@ -54,11 +51,15 @@ @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); } @@ -68,10 +69,13 @@ EServiceResponse eServiceResponse = responseEntity.getBody(); if(E_SERVICE_LOGIN_SUCCESS_CODE.equals(eServiceResponse.getCode())){ + loginRecordService.saveEServiceLoginSuccessRecord(account); return getConsultantToken(account, credentials); } - - throw new RuntimeException("eService login failed, eService response code = " + eServiceResponse.getCode() + ", eService response msg = " + eServiceResponse.getMsg()); + else { + loginRecordService.saveEServiceLoginFailRecord(account, eServiceResponse.getMsg()); + throw new RuntimeException("eService login failed, eService response code = " + eServiceResponse.getCode() + ", eService response msg = " + eServiceResponse.getMsg()); + } } throw new RuntimeException("eService http error!, response http status code = " + responseEntity.getStatusCode()); 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 f59f84b..76af3d3 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java +++ b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java @@ -3,6 +3,7 @@ import com.pollex.pam.domain.AppointmentCustomerView; import com.pollex.pam.domain.Consultant; import com.pollex.pam.domain.CustomerFavoriteConsultant; +import com.pollex.pam.enums.LoginResult; import com.pollex.pam.repository.AppointmentCustomerViewRepository; import com.pollex.pam.repository.ConsultantRepository; import com.pollex.pam.repository.CustomerFavoriteConsultantRepository; @@ -43,6 +44,9 @@ @Autowired AppointmentCustomerViewMapper appointmentCustomerViewMapper; + @Autowired + LoginRecordService loginRecordService; + public List<ConsultantDTO> getMyConsultantList() { Long userId = SecurityUtils.getCustomerDBId(); return customerFavoriteConsultantRepository.findAllByCustomerId(userId) @@ -74,7 +78,12 @@ public ConsultantDetailDTO getConsultantDetail(String agentNo) { Consultant consultant = consultantRepository.findOneByAgentNo(agentNo).orElseThrow(ConsultantNotFoundException::new); - return consultantMapper.toDetailDto(consultant); + ConsultantDetailDTO consultantDetailDTO = consultantMapper.toDetailDto(consultant); + + loginRecordService.findLatestLoginRecord(agentNo, LoginResult.SUCCESS) + .ifPresent(loginRecord -> consultantDetailDTO.setLatestLoginTime(loginRecord.getLoginDate())); + + return consultantDetailDTO; } @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 new file mode 100644 index 0000000..2bbb169 --- /dev/null +++ b/pamapi/src/main/java/com/pollex/pam/service/LoginRecordService.java @@ -0,0 +1,66 @@ +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.findTopByAccountAndResultOrderByLoginDate(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/LoginService.java b/pamapi/src/main/java/com/pollex/pam/service/LoginService.java deleted file mode 100644 index 0cd4b29..0000000 --- a/pamapi/src/main/java/com/pollex/pam/service/LoginService.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.pollex.pam.service; - -import java.security.KeyManagementException; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.X509Certificate; - -import javax.net.ssl.SSLContext; - -import org.apache.http.conn.ssl.NoopHostnameVerifier; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.ssl.SSLContexts; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.pollex.pam.config.ApplicationProperties; -import com.pollex.pam.service.dto.EServiceRequest; -import com.pollex.pam.service.dto.EServiceResponse; -import com.pollex.pam.web.rest.vm.OtpEmailLoginVM; -import com.pollex.pam.web.rest.vm.OtpSMSLoginVM; -import com.pollex.pam.web.rest.vm.VerifyOtpVM; - - -@Service -public class LoginService { - - private final ApplicationProperties applicationProperties; - - public LoginService(ApplicationProperties applicationProperties) { - this.applicationProperties = applicationProperties; - } - - public void otpLoginByPhone(OtpSMSLoginVM login) { - - } - - public void otpLoginByEmail(OtpEmailLoginVM login) { - - } - - public void verifyOtp(VerifyOtpVM verifyOtpParam) { - // todo 閬���tp����� - - // ��身�����B��Ⅱ隤� - } - - public ResponseEntity<EServiceResponse> loginByEService(String account, String paxxword) throws Exception{ - EServiceRequest dto = new EServiceRequest(); - dto.setFunc("ValidateUserLogin"); - dto.setId(account); - dto.setPin(paxxword); - dto.setPwd(paxxword); - dto.setSys("epos"); - - String dtoJson = new ObjectMapper().writeValueAsString(dto); - - RestTemplate restTemplate = getTrustAllRestTemplate(); - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - - HttpEntity<String> entity = new HttpEntity<>(dtoJson, headers); - return restTemplate.exchange(applicationProperties.geteServiceLoginUrl(), HttpMethod.POST, entity, EServiceResponse.class); - } - - private RestTemplate getTrustAllRestTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { - - SSLContext sslContext = SSLContexts.custom() - .loadTrustMaterial(null, (X509Certificate[] x509Certs, String s) -> true) - .build(); - SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier()); - CloseableHttpClient httpClient = HttpClients.custom() - .setSSLSocketFactory(csf) - .build(); - HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); - requestFactory.setHttpClient(httpClient); - requestFactory.setConnectTimeout(300000); - requestFactory.setReadTimeout(300000); - return new RestTemplate(requestFactory); - } -} 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 c9a949f..be48bd2 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java +++ b/pamapi/src/main/java/com/pollex/pam/service/OtpUtilService.java @@ -10,7 +10,6 @@ import org.springframework.stereotype.Service; import com.pollex.pam.config.ApplicationProperties; -import com.pollex.pam.security.provider.OtpAuthenticationProvider; import com.pollex.pam.service.dto.OtpResponseDTO; import org.springframework.transaction.annotation.Transactional; @@ -28,6 +27,9 @@ @Autowired OtpTmpService otpTmpService; + @Autowired + LoginRecordService loginRecordService; + @Transactional public void verifyOtp(VerifyOtpVM verifyOtpParam) { verifyOtp(verifyOtpParam.getAccount(), verifyOtpParam.getIndexKey(), verifyOtpParam.getOtpCode()); @@ -37,10 +39,15 @@ public void verifyOtp(String account, String indexKey, String otpCode) { try { if(applicationProperty.isMockLogin()){ + loginRecordService.saveOTPLoginSuccessRecord(account); log.debug("Do MockLogin"); } else { // otp logon OtpResponseDTO otpResponseDTO = otpWebService.verifyOTP(indexKey, otpCode); - if (!otpResponseDTO.isSuccess()) { + if (otpResponseDTO.isSuccess()) { + loginRecordService.saveOTPLoginSuccessRecord(account); + } + else { + loginRecordService.saveOTPLoginFailRecord(account, otpResponseDTO.getFailReason()); throw new AuthenticationCredentialsNotFoundException(""); } } diff --git a/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java b/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java index 138c713..ea9842b 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java +++ b/pamapi/src/main/java/com/pollex/pam/service/mapper/ConsultantMapper.java @@ -72,17 +72,16 @@ consultantDetailDTO.setPhoneNumber(source.getPhoneNumber()); consultantDetailDTO.setServeArea(source.getServeArea()); consultantDetailDTO.setCompanyAddress(source.getCompanyAddress()); - consultantDetailDTO.setLatestLoginTime(source.getLatestLoginTime()); consultantDetailDTO.setSeniority(source.getSeniority()); consultantDetailDTO.setConcept(source.getConcept()); consultantDetailDTO.setAwards(source.getAward()); consultantDetailDTO.setImage(source.getPhotoPath()); + consultantDetailDTO.setExpertises(splitStringWithChar(source.getExpertise())); + consultantDetailDTO.setExperiences(splitStringWithChar(source.getExperience())); // todo 瘙箏����漲 consultantDetailDTO.setSuitability(50); consultantDetailDTO.setEvaluation(50); - consultantDetailDTO.setExpertises(splitStringWithChar(source.getExpertise())); - consultantDetailDTO.setExperiences(splitStringWithChar(source.getExperience())); return consultantDetailDTO; } 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 d4286dc..947b621 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 @@ -1,17 +1,11 @@ package com.pollex.pam.web.rest; -import com.fasterxml.jackson.databind.ObjectMapper; import com.pollex.pam.config.ApplicationProperties; -import com.pollex.pam.security.jwt.JWTFilter; import com.pollex.pam.security.jwt.TokenProvider; -import com.pollex.pam.security.token.EServiceAuthenticationToken; -import com.pollex.pam.security.token.OtpAuthenticationToken; -import com.pollex.pam.service.LoginService; +import com.pollex.pam.service.LoginRecordService; import com.pollex.pam.service.OtpWebService; -import com.pollex.pam.service.dto.EServiceRequest; import com.pollex.pam.service.dto.EServiceResponse; import com.pollex.pam.service.dto.OtpResponseDTO; -import com.pollex.pam.web.rest.vm.OtpAccount; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; @@ -25,8 +19,6 @@ import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; @@ -51,7 +43,7 @@ private final static Logger log = LoggerFactory.getLogger(TestLoginResource.class); @Autowired - LoginService loginService; + LoginRecordService loginRecordService; @Autowired ApplicationProperties applicationProperty; -- Gitblit v1.8.0