From 71609e40ba719ff40c27bb00d7f5f4af521a80e2 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期五, 26 四月 2024 08:52:09 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pms-SV

---
 pms-parent/pms-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java |   97 +++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 86 insertions(+), 11 deletions(-)

diff --git a/pms-parent/pms-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java b/pms-parent/pms-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java
index 2e9b29c..8e93c9c 100644
--- a/pms-parent/pms-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java
+++ b/pms-parent/pms-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java
@@ -4,10 +4,12 @@
 import com.dy.common.util.MD5;
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
-import com.dy.pmsGlobal.aop.OperationDescription;
+import com.dy.pmsGlobal.aop.Log;
 import com.dy.pmsGlobal.pojoBa.BaUser;
 import com.mysql.cj.util.StringUtils;
 import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
 import jakarta.validation.Valid;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,7 +17,12 @@
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
 import java.util.Objects;
+import java.util.Random;
 import java.util.UUID;
 
 /**
@@ -46,34 +53,54 @@
      * @return 鐧诲綍鐢ㄦ埛鍊煎璞�
      */
     @PostMapping(path = "login", consumes = MediaType.APPLICATION_JSON_VALUE)//鍓嶇鎻愪氦json鏁版嵁
-    @OperationDescription("鐢ㄦ埛鐧诲綍(json)")
-    public BaseResponse<UserVo> login(@RequestBody  @Valid LoginVo vo, BindingResult bindingResult) {
+    @Log("鐢ㄦ埛鐧诲綍(json)")
+    public BaseResponse<UserVo> login(@RequestBody  @Valid LoginVo vo,BindingResult bindingResult,
+                                      HttpSession session) {
         try {
             if(bindingResult != null && bindingResult.hasErrors()){
                 return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
             }
-            return this.doLogin(vo) ;
+
+            // 浠嶴ession涓幏鍙栦繚瀛樼殑楠岃瘉鐮�
+            String sessionCaptcha = (String) session.getAttribute("captcha");
+            // 棣栧厛楠岃瘉楠岃瘉鐮�
+            if (vo.captcha != null && vo.captcha.equalsIgnoreCase(sessionCaptcha)) {
+                session.removeAttribute("captcha");
+                return this.doLogin(vo) ;
+            } else {
+                // 楠岃瘉鐮侀敊璇紝杩斿洖鐧诲綍椤甸潰骞舵樉绀洪敊璇俊鎭�
+                return BaseResponseUtils.buildFail("楠岃瘉鐮侀敊璇�");
+            }
         } catch (Exception e) {
-            log.error("鏌ヨ涓�涓敤鎴锋暟鎹紓甯�", e);
+            log.error("鐢ㄦ埛鐧诲綍寮傚父", e);
             return BaseResponseUtils.buildException(e.getMessage());
         }
     }
 
     /**
      * 瀹㈡埛绔姹傜敤鎴风櫥褰曪紝瀹㈡埛绔彁浜orm琛ㄥ崟
-     * @param vo 鐧诲綍鐢ㄦ埛form琛ㄥ崟瀵硅薄
+     * @param loginVo 鐧诲綍鐢ㄦ埛form琛ㄥ崟瀵硅薄
      * @return 鐧诲綍鐢ㄦ埛鍊煎璞�
      */
     @PostMapping(path = "loginForm", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)//鍓嶇鎻愪氦form琛ㄥ崟鏁版嵁
-    @OperationDescription("鐢ㄦ埛鐧诲綍(form)")
-    public BaseResponse<UserVo> loginForm(@RequestBody @Valid LoginVo vo, BindingResult bindingResult){
+    @Log("鐢ㄦ埛鐧诲綍(form)")
+    public BaseResponse<UserVo> loginForm(@Valid LoginVo loginVo, BindingResult bindingResult,HttpSession session){
         try{
             if(bindingResult != null && bindingResult.hasErrors()){
                 return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
             }
-            return this.doLogin(vo) ;
+            // 浠嶴ession涓幏鍙栦繚瀛樼殑楠岃瘉鐮�
+            String sessionCaptcha = (String) session.getAttribute("captcha");
+            // 棣栧厛楠岃瘉楠岃瘉鐮�
+            if (loginVo.captcha != null && loginVo.captcha.equalsIgnoreCase(sessionCaptcha)) {
+                session.removeAttribute("captcha");
+                return this.doLogin(loginVo) ;
+            } else {
+                // 楠岃瘉鐮侀敊璇紝杩斿洖鐧诲綍椤甸潰骞舵樉绀洪敊璇俊鎭�
+                return BaseResponseUtils.buildFail("楠岃瘉鐮侀敊璇�");
+            }
         } catch (Exception e) {
-            log.error("鏌ヨ涓�涓敤鎴锋暟鎹紓甯�", e);
+            log.error("鐢ㄦ埛鐧诲綍寮傚父", e);
             return BaseResponseUtils.buildException(e.getMessage());
         }
     }
@@ -85,7 +112,7 @@
      * @return 姝e父閫�鍑虹櫥褰曡繑鍥瀟rue锛屽惁鍒欒繑鍥瀎alse
      */
     @GetMapping(path = "logout")
-    @OperationDescription("閫�鍑虹櫥褰�")
+    @Log("閫�鍑虹櫥褰�")
     public BaseResponse<Boolean> logout(HttpServletRequest hr){
         try{
             String token = hr.getHeader("token") ;
@@ -100,6 +127,8 @@
             return BaseResponseUtils.buildException(e.getMessage());
         }
     }
+
+
 
     /**
      * 姝ゆ柟娉曚緵瀛愭ā鍧楃郴缁熻皟鐢紝鎵�浠ヤ笉鍏紑鍦ˋPI鎺ュ彛涓�
@@ -187,11 +216,57 @@
         }
         return vo ;
     }
+
+    /**
+     * 鐢熸垚鐧诲綍楠岃瘉鐮�
+     * @param response
+     * @param session
+     * @throws IOException
+     */
+    @GetMapping("/captcha")
+    public void captcha(HttpServletResponse response, HttpSession session) throws IOException {
+        // 璁剧疆鍝嶅簲鐨勭被鍨嬫牸寮忎负鍥剧墖鏍煎紡
+        response.setContentType("image/jpeg");
+        // 绂佹鍥惧儚缂撳瓨
+        response.setHeader("Pragma", "no-cache");
+        response.setHeader("Cache-Control", "no-cache");
+        response.setDateHeader("Expires", 0);
+
+        int width = 100, height = 50;
+        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+        Graphics g = image.getGraphics();
+        // 璁惧畾鑳屾櫙鑹�
+        g.setColor(Color.WHITE);
+        g.fillRect(0, 0, width, height);
+        // 璁惧畾瀛椾綋
+        g.setFont(new Font("Arial", Font.BOLD, 30));
+        // 闅忔満鐢熸垚楠岃瘉鐮�
+        String captcha = generateCaptcha();
+        // 灏嗛獙璇佺爜瀛樺叆Session
+        session.setAttribute("captcha", captcha);
+        // 鍦ㄥ浘鐗囦笂缁樺埗楠岃瘉鐮�
+        g.setColor(Color.BLACK);
+        g.drawString(captcha, 15, 35);
+        g.dispose();
+        // 杈撳嚭鍥剧墖
+        ImageIO.write(image, "JPEG", response.getOutputStream());
+    }
+
+
     /////////////////////////////////////////////////////////////////
     //
     // 浠ヤ笅绉佹湁鏂规硶
     //
     /////////////////////////////////////////////////////////////////
+
+    /**
+     * 鐢熸垚鍥涗綅闅忔満鏁�
+     * @return
+     */
+    private String generateCaptcha() {
+        Random r = new Random();
+        return r.nextInt(9000) + 1000 + "";
+    }
     /**
      * 鐢ㄦ埛鐧诲綍
      * @param vo 鐧诲綍鐢ㄦ埛form琛ㄥ崟瀵硅薄

--
Gitblit v1.8.0