首页>代码>基于 SpringBoot + vue 企业信息管理系统>/liawan-vue/liawan-admin/src/main/java/com/javapub/liawan/admin/controller/common/CaptchaController.java
package com.javapub.liawan.admin.controller.common;

import com.google.code.kaptcha.Producer;
import com.javapub.liawan.common.config.LiaWanConfig;
import com.javapub.liawan.common.constant.Constants;
import com.javapub.liawan.common.core.domain.AjaxResult;
import com.javapub.liawan.common.core.redis.RedisCache;
import com.javapub.liawan.common.utils.sign.Base64;
import com.javapub.liawan.common.utils.uuid.IdUtils;
import com.javapub.liawan.system.service.ISysConfigService;
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 javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

/**
 * 验证码操作处理
 *
 * @author ruoyi
 */
@RestController
public class CaptchaController {
    @Resource(name = "captchaProducer")
    private Producer captchaProducer;

    @Resource(name = "captchaProducerMath")
    private Producer captchaProducerMath;

    @Autowired
    private RedisCache redisCache;

    @Autowired
    private ISysConfigService configService;

    /**
     * 生成验证码
     */
    @GetMapping("/captchaImage")
    public AjaxResult getCode(HttpServletResponse response) throws IOException {
        AjaxResult ajax = AjaxResult.success();
        boolean captchaOnOff = configService.selectCaptchaOnOff();
        ajax.put("captchaOnOff", captchaOnOff);
        if (!captchaOnOff) {
            return ajax;
        }

        // 保存验证码信息
        String uuid = IdUtils.simpleUUID();
        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;

        String capStr = null, code = null;
        BufferedImage image = null;

        // 生成验证码
        String captchaType = LiaWanConfig.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;
    }
}
最近下载更多
依旧原地徘徊  LV12 1月16日
ooosehun  LV1 2024年12月18日
zolscy  LV24 2024年11月27日
yangchengshuai  LV15 2024年10月29日
mlml123  LV6 2024年8月20日
TY0165  LV20 2024年6月17日
vacalono  LV1 2024年5月16日
wanglinddad  LV55 2024年5月14日
寒于水  LV2 2024年5月13日
1222222tcyy  LV8 2024年5月2日
最近浏览更多
f22m1a2b2  LV17 1月23日
2602275348  LV12 2024年12月26日
ooosehun  LV1 2024年12月18日
11999333  LV1 2024年12月18日
zolscy  LV24 2024年11月26日
15342201772  LV9 2024年11月25日
yangchengshuai  LV15 2024年10月29日
liuqingfang  LV2 2024年10月28日
charleswang  LV7 2024年10月21日
xp95323  LV15 2024年10月11日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友