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 com.sandu.common.security.annotation.AnonymousAccess; 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; /** * @Author Nan * @Date 2022/04/25 * @Version 1.0 */ @RestController @AllArgsConstructor @RequestMapping("/v1/authcode") public class VerifyCodeController { private final Snowflake snowflake; @AnonymousAccess @RequestMapping("/getImg") @ResponseBody 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(key+"", MD5Util.md5(ivc.getText().toUpperCase())); //将验证码的文本存在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; } @AnonymousAccess @RequestMapping("/Login_authentication/{key}") @ResponseBody 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"); r6mt // if(vcode.isEmpty()||vcode==null){ // return "验证码不能为空"; // } 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; } }