2021与蓝度共同重构项目,服务端
liuhaonan
2022-04-25 e34576cd19db18891cef039e53bf9cef660403af
验证码实现
已修改3个文件
69 ■■■■ 文件已修改
ximon-admin/src/main/java/com/sandu/ximon/admin/security/authcode/ImageVerificationCode.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/security/authcode/VerifyCodeController.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/security/base64_Img.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/security/authcode/ImageVerificationCode.java
@@ -1,13 +1,13 @@
package com.sandu.ximon.admin.security.authcode;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.*;
import java.util.Base64;
import java.util.Random;
import javax.imageio.ImageIO;
@@ -131,4 +131,6 @@
    {
        ImageIO.write(image, "JPEG", out);
    }
}
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()); //将验证码的文本存在session中
        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();//转换成base64串
//        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()); //将验证码的文本存在session中
//        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");    //从session中获取真正的验证码
        String session_vcode = (String) request.getSession().getAttribute(key);    //从session中获取真正的验证码
        //比较输入的验证码和真正的验证码
//        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;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/security/base64_Img.java
@@ -9,8 +9,7 @@
    public static void main(String[] args) {
        //str = GetImageStr();
        String s="/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB\nAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCADAAMADASIA\nAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA\nAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3\nODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm\np6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA\nAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx\nBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK\nU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3\nuLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+Qb9l\nj9lnQPGWgw/Ef4k2019pl7LIPDXhoSy29teWsEjRyavqssDJcSwzTK8VlYxSxIY4nubl5o5ooh9r\nj9nL4EYP/Fr/AAvhRkk2cnAG7JJM3AGDkk9MEkgDJ+ziQPgR8MSSFA8LWhLMQFAElxlmJ4AA5JJw\nBkk8GvCPij8VdS8WaheaPo93NZ+GLWV7eNLeR4n1oxO6te3royu9tI2WtLPPkiHZLOjzuSuLbu9X\nvbr/ADTXfy/4dJCWq+7/ANu83/L3fq27npN98MP2T9MlaC+8OfDqCZDteLzFmkQ5IIZLaeZlII5D\nDIyMjg1R/wCED/ZB/wCgF8Pf+/F3/wDE18uABRhQAPQDA/IUtK77v73/AJhZdl93p5+S/De2v1F/\n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\n3WltVv5Ob7+a+/fdh/Wz/X+unmf/2Q==\n";
      //
        String s="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";
        GenerateImage(s);
    }