Kaptchar DefaultKaptcha 图片验证码配置和使用

参考:Kaptchar DefaultKaptcha 配置_xx先森-CSDN博客

1.配置config交给spring管理

import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

@Configuration
public class KaptchaConfig {
 
    @Bean
    public DefaultKaptcha producer() {
        Properties properties = new Properties();
        // 图片边框
        properties.put("kaptcha.border", "yes");
        //边框颜色
        properties.put("kaptcha.border.color", "blue");
        //背景颜色渐变开始
        properties.put("kaptcha.background.clear.from", "47,58,255");
        //背景颜色渐变结束
        properties.put("kaptcha.background.clear.to", "249,207,204");
        // 字体颜色
        properties.put("kaptcha.textproducer.font.color", "black");
        // 文字间隔
        properties.put("kaptcha.textproducer.char.space", "5");
        // 字体
        properties.put("kaptcha.textproducer.font.names", "Arial,Courier,cmr10,宋体,楷体,微软雅黑");
        Config config = new Config(properties);
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}

2.使用

public ResultVO<String> captcha(HttpServletRequest request){

        KaptchaConfig bean = SpringUtils.getBean(KaptchaConfig.class);
        String remoteAddr = request.getRemoteAddr();
        DefaultKaptcha producer = bean.producer();
        //加载配置
        String validate = producer.createText();
        //将生成的验证码放入redis
        redisUtil.set(Const.IMG_CODE + remoteAddr, validate, 60 * 3);
        //生成缓存区图片(这里会有异常提示有几个包没有需要去导包,具体的用try...cath打出来查看)
        BufferedImage img = producer.createImage(validate);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();//io流
        try {
            ImageIO.write(img, "jpg", baos);//写入流中
        } catch (IOException e) {
            e.printStackTrace();
        }
        byte[] bytes = baos.toByteArray();//转换成字节
//        BASE64Encoder encoder = new BASE64Encoder();
//        String jpg_base64 = encoder.encodeBuffer(bytes).trim();//转换成base64串
        String jpg_base64 = Base64Utils.encodeToString(bytes).trim();//转换成base64串
        jpg_base64 = jpg_base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n
        return new ResultVO<>(ResultStatus.SUCCESS, "data:image/jpg;base64," + jpg_base64);
    }

这里是生成base64图片返回给前端,也可以直接将流写入response中


//获取生成的随机数存入session,以便之后比较
String validate = producer.createText();
req.getSession().setAttribute("validate",validate);
//生成缓存区图片(这里会有异常提示有几个包没有需要去导包,具体的用try...cath打出来查看)
BufferedImage img = producer.createImage(validate);
//设置服务器发送给浏览器的数据类型,这里浏览器会以图片的形式解析HTML
resp.setContentType("image/jpeg");
//用于输出字符流数据或者二进制的字节流数据
OutputStream ops = resp.getOutputStream();
//将缓存区图片数据写入
ImageIO.write(img,"jpg",ops);
ops.close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值