package com.sandu.ximon.admin.security.authcode; import cn.hutool.core.lang.Snowflake; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.sandu.common.security.annotation.AnonymousAccess; import com.sandu.ximon.admin.utils.RedisUtils; 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 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; // private final RedisUtils redisUtils; @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(); //获取验证码 System.out.println(ivc.getText() + "----加密前的验证码"); RedisUtils.getBean().set(key + "", MD5Util.md5(ivc.getText().toUpperCase()), 60); String img = getBufferedImageToBase64(image, "JPEG"); Map map = new HashMap(); map.put("img", img); map.put("key", key); return map; // return image; } @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 session_vcode = (String) request.getSession().getAttribute(key); //从session中获取真正的验证码 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; } }