From 3b0671286dd280c0172352e6f3d116ecd7051efe Mon Sep 17 00:00:00 2001 From: jack <jack.su@pollex.com.tw> Date: 星期二, 08 八月 2023 15:27:31 +0800 Subject: [PATCH] [UPDATE] 顧問登入如果密碼解密失敗直接拋錯給前端 --- pamapi/src/main/java/com/pollex/pam/web/rest/EServiceResource.java | 62 +++++++++++++++++++++++++++---- 1 files changed, 54 insertions(+), 8 deletions(-) diff --git a/pamapi/src/main/java/com/pollex/pam/web/rest/EServiceResource.java b/pamapi/src/main/java/com/pollex/pam/web/rest/EServiceResource.java index 840b8c9..796e2dd 100644 --- a/pamapi/src/main/java/com/pollex/pam/web/rest/EServiceResource.java +++ b/pamapi/src/main/java/com/pollex/pam/web/rest/EServiceResource.java @@ -1,9 +1,13 @@ package com.pollex.pam.web.rest; -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.web.rest.vm.EServiceLoginVM; +import static com.pollex.pam.business.aop.logging.audit.AuditLoggingType.CONSULTANT_LOGIN; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -11,14 +15,28 @@ 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.util.StringUtils; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.pollex.pam.business.aop.logging.audit.AuditLoggingInject; +import com.pollex.pam.business.security.token.EServiceAuthenticationToken; +import com.pollex.pam.business.service.ConsultantService; +import com.pollex.pam.business.service.util.AesUtil; +import com.pollex.pam.business.web.errors.OtpLoginFailException; +import com.pollex.pam.business.web.vm.EServiceLoginVM; +import com.pollex.pam.security.jwt.JWTFilter; +import com.pollex.pam.security.jwt.TokenProvider; + @RestController @RequestMapping("/api/eService") public class EServiceResource { + + private final static Logger log = LoggerFactory.getLogger(EServiceResource.class); + @Autowired AuthenticationManagerBuilder authenticationManagerBuilder; @@ -26,15 +44,43 @@ @Autowired TokenProvider tokenProvider; - @PostMapping("/authenticate") - public ResponseEntity<UserJWTController.JWTToken> authorize(@RequestBody EServiceLoginVM eServiceLoginVM) { - EServiceAuthenticationToken authenticationToken = new EServiceAuthenticationToken( + @Autowired + ConsultantService consultantService; + + @AuditLoggingInject(type = CONSULTANT_LOGIN) + @PostMapping("/authenticate/{imgCode}") + public ResponseEntity<UserJWTController.JWTToken> authorize( + @RequestBody EServiceLoginVM eServiceLoginVM + , HttpServletResponse response, HttpServletRequest request, + @PathVariable String imgCode){ + + String paswword = AesUtil.aesDecode(eServiceLoginVM.getPassword()); + if(!StringUtils.hasText(paswword)) { + throw new OtpLoginFailException("撖Ⅳ閫�撖仃���"); + } + + HttpSession session = request.getSession(); + String sessionImpCode = (String) session.getAttribute("img_code"); + + if (!StringUtils.hasText(sessionImpCode) + || !StringUtils.hasText(imgCode)) { + throw new OtpLoginFailException("撽�Ⅳ頛詨�隤�"); + } + + if(!imgCode.equals(sessionImpCode)) { + throw new OtpLoginFailException("撽�Ⅳ頛詨�隤�"); + } + + session.setAttribute("img_code", null); + EServiceAuthenticationToken authenticationToken = new EServiceAuthenticationToken( eServiceLoginVM.getUsername(), - eServiceLoginVM.getPassword() + paswword ); Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); + consultantService.updateLoginTime(eServiceLoginVM.getUsername()); SecurityContextHolder.getContext().setAuthentication(authenticationToken); + String jwt = tokenProvider.createToken(authentication, false); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add(JWTFilter.AUTHORIZATION_HEADER, "Bearer" + jwt); -- Gitblit v1.8.0