You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.7 KiB
86 lines
2.7 KiB
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.beans.factory.annotation.Value; |
|
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.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; |
|
|
|
/** |
|
* 验证码操作处理 |
|
* |
|
* @author ruoyi |
|
*/ |
|
@RestController |
|
public class CaptchaController |
|
{ |
|
@Resource(name = "captchaProducer") |
|
private Producer captchaProducer; |
|
|
|
@Resource(name = "captchaProducerMath") |
|
private Producer captchaProducerMath; |
|
|
|
@Autowired |
|
private RedisCache redisCache; |
|
|
|
// 验证码类型 |
|
@Value("${ruoyi.captchaType}") |
|
private String captchaType; |
|
|
|
/** |
|
* 生成验证码 |
|
*/ |
|
@GetMapping("/captchaImage") |
|
public AjaxResult getCode(HttpServletResponse response) throws IOException |
|
{ |
|
// 保存验证码信息 |
|
String uuid = IdUtils.simpleUUID(); |
|
String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; |
|
|
|
String capStr = null, code = null; |
|
BufferedImage image = null; |
|
|
|
// 生成验证码 |
|
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()); |
|
} |
|
|
|
AjaxResult ajax = AjaxResult.success(); |
|
ajax.put("uuid", uuid); |
|
ajax.put("img", Base64.encode(os.toByteArray())); |
|
return ajax; |
|
} |
|
}
|
|
|