| New file | 
 |  |  | 
 |  |  | package com.dy.pipIrrApp.captcha; | 
 |  |  |  | 
 |  |  | import com.dy.pipIrrApp.captcha.dto.CaptchaDomain; | 
 |  |  | import com.dy.pipIrrGlobal.daoBa.BaCaptchaMapper; | 
 |  |  | import com.dy.pipIrrGlobal.pojoBa.BaCaptcha; | 
 |  |  | import com.google.code.kaptcha.Producer; | 
 |  |  | import jakarta.annotation.Resource; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  |  | 
 |  |  | import javax.imageio.ImageIO; | 
 |  |  | import java.io.ByteArrayOutputStream; | 
 |  |  | import java.util.Base64; | 
 |  |  | import java.util.UUID; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * @author ZhuBaoMin | 
 |  |  |  * @date 2024-09-11 13:46 | 
 |  |  |  * @LastEditTime 2024-09-11 13:46 | 
 |  |  |  * @Description | 
 |  |  |  */ | 
 |  |  |  | 
 |  |  | @Slf4j | 
 |  |  | @Service | 
 |  |  | public class CaptchaSV { | 
 |  |  |     @Autowired | 
 |  |  |     private BaCaptchaMapper baCaptchaMapper; | 
 |  |  |  | 
 |  |  |     @Resource(name = "captchaProducer") | 
 |  |  |     private Producer captchaProducer; | 
 |  |  |  | 
 |  |  |     @Resource(name = "captchaProducerMathOne") | 
 |  |  |     private Producer captchaProducerMathOne; | 
 |  |  |  | 
 |  |  |     @Resource(name = "captchaProducerMathTwo") | 
 |  |  |     private Producer captchaProducerMathTwo; | 
 |  |  |  | 
 |  |  |     private static final String TYPE_CHAR = "char"; | 
 |  |  |     private static final String TYPE_MATH_ONE = "math"; | 
 |  |  |     private static final String TYPE_MATH_TWO = "math2"; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * Kaptcha生成验证码实体 | 
 |  |  |      * @param type,char - 字符(缺省) | math - 一位数算式 | math2 - 两位数算式 | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public CaptchaDomain createGoogleCaptcha(String type) { | 
 |  |  |         // 定义验证码实体 | 
 |  |  |         CaptchaDomain captchaDomain = new CaptchaDomain(); | 
 |  |  |         // 一位数加减乘除 | 
 |  |  |         if (TYPE_MATH_ONE.equals(type)) { | 
 |  |  |             // 生成文本 | 
 |  |  |             String producerText = captchaProducerMathOne.createText(); | 
 |  |  |             // 设置验证码字符 | 
 |  |  |             captchaDomain.setText(producerText.substring(0, producerText.indexOf("@"))); | 
 |  |  |             // 设置验证码答案码 | 
 |  |  |             captchaDomain.setCode(producerText.substring(producerText.indexOf("@") + 1)); | 
 |  |  |             // 设置验证码图片 | 
 |  |  |             captchaDomain.setImage(captchaProducerMathOne.createImage(captchaDomain.getText())); | 
 |  |  |         } | 
 |  |  |         // 两位数加减乘除 | 
 |  |  |         else if (TYPE_MATH_TWO.equals(type)) { | 
 |  |  |             String producerText = captchaProducerMathTwo.createText(); | 
 |  |  |             captchaDomain.setText(producerText.substring(0, producerText.indexOf("@"))); | 
 |  |  |             captchaDomain.setCode(producerText.substring(producerText.indexOf("@") + 1)); | 
 |  |  |             captchaDomain.setImage(captchaProducerMathTwo.createImage(captchaDomain.getText())); | 
 |  |  |         } | 
 |  |  |         // 缺省情况:字符 | 
 |  |  |         else { | 
 |  |  |             captchaDomain.setText(captchaProducer.createText()); | 
 |  |  |             captchaDomain.setCode(captchaDomain.getText()); | 
 |  |  |             captchaDomain.setImage(captchaProducer.createImage(captchaDomain.getText())); | 
 |  |  |         } | 
 |  |  |         // 生成base64 | 
 |  |  |         try { | 
 |  |  |             // 定义字节数组输出流 | 
 |  |  |             ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); | 
 |  |  |             // 将图像以 jpg 的形式,写到字节数组输出流中 | 
 |  |  |             ImageIO.write(captchaDomain.getImage(), "jpg", outputStream); | 
 |  |  |  | 
 |  |  |             // 写入base64格式 | 
 |  |  |             captchaDomain.setBase64("data:image/jpg;base64," + Base64.getEncoder().encodeToString(outputStream.toByteArray())); | 
 |  |  |             // 写入唯一Token | 
 |  |  |             captchaDomain.setToken(UUID.randomUUID().toString()); | 
 |  |  |             // 返回结果 | 
 |  |  |             return captchaDomain; | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             System.out.println(e.getMessage()); | 
 |  |  |             return null; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 添加图片验证记录 | 
 |  |  |      * @param po | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public Long addCaptcha(BaCaptcha po) { | 
 |  |  |         baCaptchaMapper.insert(po); | 
 |  |  |         return po.getId(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |