首页>代码>基于 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;
    }
}
最近下载更多
vacalono  LV1 5月16日
wanglinddad  LV55 5月14日
寒于水  LV2 5月13日
1222222tcyy  LV8 5月2日
dapeng0011  LV13 3月2日
肸乯  LV8 1月31日
xiexiaoming05  LV14 1月26日
siximu912  LV10 1月23日
zhangwuxuan 2023年12月31日
暂无贡献等级
最近浏览更多
goccgoccgocc  LV4 5月23日
求学的熊猫  LV8 5月20日
vacalono  LV1 5月16日
wanglinddad  LV55 5月14日
初秋若寒  LV10 5月14日
寒于水  LV2 5月13日
1941549176  LV4 5月11日
要保持微笑  LV4 5月8日
飃go with wind 5月7日
暂无贡献等级
1222222tcyy  LV8 5月2日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友