首页>代码>基于 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;
    }
}
最近下载更多
dapeng0011  LV13 3月2日
肸乯  LV8 1月31日
xiexiaoming05  LV14 1月26日
siximu912  LV10 1月23日
zhangwuxuan 2023年12月31日
暂无贡献等级
Jingbo Jia  LV2 2023年12月9日
1515465193  LV9 2023年11月30日
wuying8208  LV15 2023年11月28日
唐唐丶  LV33 2023年11月20日
最近浏览更多
玖零定制问题修复  LV34 4月4日
赵文俊 3月16日
暂无贡献等级
ChenZheMeng  LV3 3月9日
2771547747 3月6日
暂无贡献等级
小王wang  LV10 2月29日
dapeng0011  LV13 2月26日
1690356080  LV37 1月31日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友