From e34576cd19db18891cef039e53bf9cef660403af Mon Sep 17 00:00:00 2001
From: liuhaonan <konodioda2333@vip.qq.com>
Date: 星期一, 25 四月 2022 14:05:40 +0800
Subject: [PATCH] 验证码实现

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/security/authcode/VerifyCodeController.java |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/security/authcode/VerifyCodeController.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/security/authcode/VerifyCodeController.java
index 190b624..dfc6e23 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/security/authcode/VerifyCodeController.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/security/authcode/VerifyCodeController.java
@@ -1,17 +1,24 @@
 package com.sandu.ximon.admin.security.authcode;
 
+import cn.hutool.core.lang.Snowflake;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
+import sun.misc.BASE64Encoder;
 
+import javax.imageio.ImageIO;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.util.Base64;
+import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -24,34 +31,71 @@
 @RequestMapping("/v1/authcode")
 public class VerifyCodeController {
 
+    private final Snowflake snowflake;
 
     @RequestMapping("/getImg")
     @ResponseBody
-    public void getVerifiCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
+    public Map getVerifiCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
         /*
              1.鐢熸垚楠岃瘉鐮�
              2.鎶婇獙璇佺爜涓婄殑鏂囨湰瀛樺湪session涓�
              3.鎶婇獙璇佺爜鍥剧墖鍙戦�佺粰瀹㈡埛绔�
              */
+        long key = snowflake.nextId();
         ImageVerificationCode ivc = new ImageVerificationCode();     //鐢ㄦ垜浠殑楠岃瘉鐮佺被锛岀敓鎴愰獙璇佺爜绫诲璞�
         BufferedImage image = ivc.getImage();  //鑾峰彇楠岃瘉鐮�
-        request.getSession().setAttribute("text", ivc.getText()); //灏嗛獙璇佺爜鐨勬枃鏈瓨鍦╯ession涓�
-        ImageVerificationCode.output(image, response.getOutputStream());//灏嗛獙璇佺爜鍥剧墖鍝嶅簲缁欏鎴风
+
+//        ByteArrayOutputStream baos = new ByteArrayOutputStream();//io娴�
+//        ImageIO.write(image, "JPEG", baos);//鍐欏叆娴佷腑
+//        byte[] bytes = baos.toByteArray();//杞崲鎴愬瓧鑺�
+//        BASE64Encoder encoder = new BASE64Encoder();
+//        String png_base64 = encoder.encodeBuffer(bytes).trim();//杞崲鎴恇ase64涓�
+//        png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//鍒犻櫎 \r\n
+
+        //        ImageIO.write(bufferedImage, "png", new File("D:/qrcode1.png"));
+//        System.out.println("鍊间负锛�"+"data:image/jpg;base64,"+png_base64);
+        request.getSession().setAttribute(key+"", ivc.getText()); //灏嗛獙璇佺爜鐨勬枃鏈瓨鍦╯ession涓�
+//        ImageVerificationCode.output(image, response.getOutputStream());//灏嗛獙璇佺爜鍥剧墖鍝嶅簲缁欏鎴风
+        String img = getBufferedImageToBase64(image, "JPEG");
+        String session_vcode = (String) request.getSession().getAttribute(key+"");
+        Map map = new HashMap();
+//        map.put("img", "data:image/jpg;base64,"+png_base64);
+        map.put("img", img);
+        map.put("vlue", session_vcode);
+        map.put("key", key);
+        return map;
     }
 
-    @RequestMapping("/Login_authentication")
+    @RequestMapping("/Login_authentication/{key}")
     @ResponseBody
-    public String Login_authentication(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
+    public String Login_authentication(HttpServletRequest request, HttpServletResponse response,@PathVariable String key) throws IOException, ServletException {
         request.setCharacterEncoding("utf-8");
 //        String vcode = (String)map.get("session_vcode");
 //        if(vcode.isEmpty()||vcode==null){
 //            return "楠岃瘉鐮佷笉鑳戒负绌�";
 //        }
-        String session_vcode = (String) request.getSession().getAttribute("text");    //浠巗ession涓幏鍙栫湡姝g殑楠岃瘉鐮�
+        String session_vcode = (String) request.getSession().getAttribute(key);    //浠巗ession涓幏鍙栫湡姝g殑楠岃瘉鐮�
         //姣旇緝杈撳叆鐨勯獙璇佺爜鍜岀湡姝g殑楠岃瘉鐮�
 //        if(StrUtil.equalsIgnoreCase(session_vcode, vcode)){
 //            return "true";
 //        }
         return session_vcode;
     }
+
+    /**
+     *  BufferedImage杞垚 base64
+     * @param bufferedImage
+     * @param imageFormatName
+     * @return
+     * @throws IOException
+     */
+    public static String getBufferedImageToBase64(BufferedImage bufferedImage,String imageFormatName) throws IOException {
+        if(StringUtils.isBlank(imageFormatName)){
+            imageFormatName = "JPEG";
+        }
+        ByteArrayOutputStream stream = new ByteArrayOutputStream();
+        ImageIO.write(bufferedImage, imageFormatName, stream);
+        String s = Base64.getEncoder().encodeToString(stream.toByteArray());
+        return s;
+    }
 }

--
Gitblit v1.9.3