Kaptcha谷歌验证码生成策略
验证码使用:
在config包下新建KaptchaConfig,配置验证码生成的规则。
package com.yt.shixun.config;import com.google.code.kaptcha.Constants;
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 {@Beanpublic DefaultKaptcha defaultKaptcha() {DefaultKaptcha defaultKaptcha = new DefaultKaptcha();Properties properties = new Properties();//设置图片验证码边框properties.setProperty(Constants.KAPTCHA_BORDER, "0");//设置图片验证码宽度properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, "200");//设置图片验证码高度properties.setProperty(Constants.KAPTCHA_IMAGE_HEIGHT, "200");//设置图片验证码要使用的字符串properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_STRING,"0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM");//设置图片验证码要显示的个数properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");Config config = new Config(properties);defaultKaptcha.setConfig(config);return defaultKaptcha;}
}
写service类生成文本和验证码图片:
package com.yt.shixun.service.impl;import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.yt.shixun.common.Result;
import com.yt.shixun.controller.request.LoginRequest;
import com.yt.shixun.entity.LoginDTO;
import com.yt.shixun.entity.User;
import com.yt.shixun.mapper.UserMapper;
import com.yt.shixun.service.IUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.Base64Utils;
import org.springframework.util.DigestUtils;import javax.annotation.Resource;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.concurrent.TimeUnit;/*** * 服务实现类*
** @author yangtao* @since 2023-04-10*/
@Service
public class UserServiceImpl extends ServiceImpl implements IUserService {@ResourceDefaultKaptcha kaptcha;@ResourceRedisTemplate redisTemplate;@Overridepublic String getVcode() {//生成验证码文本,把文本存redisString text = kaptcha.createText();String key = "yt" + text;String md = DigestUtils.md5DigestAsHex(key.getBytes());//cun'ruredisTemplate.opsForValue().set(md,text,10, TimeUnit.MINUTES);//生成图片验证码,转换为base64编码BufferedImage image = kaptcha.createImage(text);ByteArrayOutputStream bos = new ByteArrayOutputStream();try {ImageIO.write(image, "jpg", bos);} catch (IOException e) {e.printStackTrace();}return "data:image/jpeg;base64," + Base64Utils.encodeToString(bos.toByteArray());}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
