| package com.ruoyi.web.controller.common; | 
|   | 
| import java.awt.image.BufferedImage; | 
| import java.io.IOException; | 
| import java.util.concurrent.TimeUnit; | 
| import javax.annotation.Resource; | 
| import javax.imageio.ImageIO; | 
| import javax.servlet.http.HttpServletResponse; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.util.FastByteArrayOutputStream; | 
| import org.springframework.web.bind.annotation.GetMapping; | 
| import org.springframework.web.bind.annotation.RestController; | 
| import com.google.code.kaptcha.Producer; | 
| import com.ruoyi.common.config.ARDConfig; | 
| import com.ruoyi.common.constant.CacheConstants; | 
| import com.ruoyi.common.constant.Constants; | 
| import com.ruoyi.common.core.domain.AjaxResult; | 
| import com.ruoyi.common.core.redis.RedisCache; | 
| import com.ruoyi.common.utils.sign.Base64; | 
| import com.ruoyi.common.utils.uuid.IdUtils; | 
| import com.ruoyi.system.service.ISysConfigService; | 
|   | 
| /** | 
|  * 验证码操作处理 | 
|  *  | 
|  * @author ruoyi | 
|  */ | 
| @RestController | 
| public class CaptchaController | 
| { | 
|     @Resource(name = "captchaProducer") | 
|     private Producer captchaProducer; | 
|   | 
|     @Resource(name = "captchaProducerMath") | 
|     private Producer captchaProducerMath; | 
|   | 
|     @Resource | 
|     private RedisCache redisCache; | 
|      | 
|     @Resource | 
|     private ISysConfigService configService; | 
|     /** | 
|      * 生成验证码 | 
|      */ | 
|     @GetMapping("/captchaImage") | 
|     public AjaxResult getCode(HttpServletResponse response) throws IOException | 
|     { | 
|         AjaxResult ajax = AjaxResult.success(); | 
|         boolean captchaEnabled = configService.selectCaptchaEnabled(); | 
|         ajax.put("captchaEnabled", captchaEnabled); | 
|         if (!captchaEnabled) | 
|         { | 
|             return ajax; | 
|         } | 
|   | 
|         // 保存验证码信息 | 
|         String uuid = IdUtils.simpleUUID(); | 
|         String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid; | 
|   | 
|         String capStr = null, code = null; | 
|         BufferedImage image = null; | 
|   | 
|         // 生成验证码 | 
|         String captchaType = ARDConfig.getCaptchaType(); | 
|         if ("math".equals(captchaType)) | 
|         { | 
|             String capText = captchaProducerMath.createText(); | 
|             capStr = capText.substring(0, capText.lastIndexOf("@")); | 
|             code = capText.substring(capText.lastIndexOf("@") + 1); | 
|             image = captchaProducerMath.createImage(capStr); | 
|         } | 
|         else if ("char".equals(captchaType)) | 
|         { | 
|             capStr = code = captchaProducer.createText(); | 
|             image = captchaProducer.createImage(capStr); | 
|         } | 
|   | 
|         redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); | 
|         // 转换流信息写出 | 
|         FastByteArrayOutputStream os = new FastByteArrayOutputStream(); | 
|         try | 
|         { | 
|             ImageIO.write(image, "jpg", os); | 
|         } | 
|         catch (IOException e) | 
|         { | 
|             return AjaxResult.error(e.getMessage()); | 
|         } | 
|   | 
|         ajax.put("uuid", uuid); | 
|         ajax.put("img", Base64.encode(os.toByteArray())); | 
|         return ajax; | 
|     } | 
| } |