栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Springboot继承Kaptcha实现验证码,Base64前端展示

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Springboot继承Kaptcha实现验证码,Base64前端展示

Springboot继承Kaptcha实现验证码

前端实现验证码仅是单纯的一个小验证,若是想要实实在在的人机验证,还是需要由后端实现验证码的生成的。

1、导入相关依赖
		
            com.github.penggle
            kaptcha
            
                
                    javax.servlet-api
                    javax.servlet
                
            
        
2、编写配置类
import static com.google.code.kaptcha.Constants.*; // 导入相关常量



@Configuration
public class CaptchaProducerConfig {
    @Bean(name = "captchaProducer")
    public DefaultKaptcha getKaptchaBean(){
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();

        Properties properties = new Properties();

        // 是否设置边框 默认为true  可以自己设置 yes  no
        properties.setProperty(KAPTCHA_BORDER,"yes");
        // 边框颜色  默认为 black
        properties.setProperty(KAPTCHA_BORDER_COLOR,"105,179,90");

        // 图片高度  默认为50
        properties.setProperty(KAPTCHA_IMAGE_HEIGHT,"60");
        // 图片宽度  默认为200
        properties.setProperty(KAPTCHA_IMAGE_WIDTH,"160");


        // 文本字符大小 默认为 40
        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE,"35");
        // 文本字符颜色 默认为 black
        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR,"blue");
        // 验证码文本字符间距 默认为2
        properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "4");
        // 验证码文本字符长度 默认为5
        properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6");
        // 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)
        properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
        // 验证码噪点颜色 默认为Color.BLACK
        properties.setProperty(KAPTCHA_NOISE_COLOR, "white");

        // KAPTCHA_SESSION_KEY
        properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCodeMath");
        // 验证码文本生成器  可以自定义文本生成器(com.xxx.KaptchaTextCreator)  可以使用默认
        properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.xxx.KaptchaTextCreator");

        // 干扰实现类
        properties.setProperty(KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise");
        // 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy
        properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
        
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}

自定义文本生成器继承 DefaultTextCreator 类 重写getText() 方法

public class KaptchaTextCreator extends DefaultTextCreator
{
   

    @Override
    public String getText()
    {
       
      	//  按照自己的想法  生成自定义文本
        
        
        return xxxx;
    }
}
3、生成验证码
    @GetMapping("/captchaImage")
    public AjaxResult getCodeImage(){
        AjaxResult ajaxResult = AjaxResult.success();
        String text = captchaProducer.createText();
       
        BufferedImage image = captchaProducer.createImage(text);

        // 缓存用于登录校验
        String key = UUID.randomUUID().toString();
        redisCache.setCacheObject("captcha"+key,code,2, TimeUnit.MINUTES);

        // 转换为字节流输出
        FastByteArrayOutputStream outputStream = new FastByteArrayOutputStream();
        
        try {
            ImageIO.write(image,"jpg",outputStream);
        } catch (IOException e) {
            e.printStackTrace();
            return AjaxResult.error(e.getMessage());
        }
        // 图片进行加密传输
        ajaxResult.put("uuid",key);
        ajaxResult.put("img", new base64Encoder().encode(outputStream.toByteArray()));
        return ajaxResult;
    }
4、前端验证码展示

this.imageUrl = "data:image/gif;base64," + res.img;

5、登录验证

从缓存里取出验证码标识校验其正确性

		String captcha = redisCache.getCacheObject(key);
        if (captcha == null){
            //验证逻辑自由发挥
        }
        

基本上就这样。。。。。。没了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749813.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号