首页 > 其他分享 >Springboot使用kaptcha生成验证码

Springboot使用kaptcha生成验证码

时间:2024-09-11 14:35:47浏览次数:8  
标签:code Springboot kaptcha 验证码 setProperty import properties uuid

        <dependency>
            <groupId>com.youkol.support.kaptcha</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
        </dependency>
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 getDefaultKaptcha(){
        DefaultKaptcha defaultKaptcha=new DefaultKaptcha();
        Properties properties=new Properties();
        properties.setProperty("kaptcha.border", "no");
        properties.setProperty("kaptcha.border.color", "34,114,200");
        properties.setProperty("kaptcha.image.width", "200");
        properties.setProperty("kaptcha.image.height", "50");
        //properties.setProperty("kaptcha.textproducer.char.string", "0123456789");
        properties.setProperty("kaptcha.textproducer.char.length", "4");
        properties.setProperty("kaptcha.textproducer.font.names", "Arial,Arial Narrow,Serif,Helvetica,Tahoma,Times New Roman,Verdana");
        properties.setProperty("kaptcha.textproducer.font.size", "38");

        properties.setProperty("kaptcha.background.clear.from", "white");
        properties.setProperty("kaptcha.background.clear.to", "white");

        Config config=new Config(properties);
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }

}

 

import com.google.code.kaptcha.impl.DefaultKaptcha;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

@Slf4j
@Service
public class CaptchaServiceImpl implements CaptchaService {

    @Resource
    RedisTemplate<String, String> redis0Template;

    @Resource
    DefaultKaptcha defaultKaptcha;

    private static final String captchaPrefix = "captcha:";

    @Override
    public Map<String, String> captcha() {
        String kaptchaText = defaultKaptcha.createText();
        BufferedImage image = defaultKaptcha.createImage(kaptchaText);

        String base64Code = "";
        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
            ImageIO.write(image, "jpg", outputStream);
            base64Code = Base64.encodeBase64String(outputStream.toByteArray());
        } catch (Exception e) {
            log.error("error when generate captcha", e);
        }

        //uuid; 唯一标识code
        //code; 验证码图片的Base64串
        Map<String, String> kaptchaVoMap = new HashMap<>();
        String uuid = UUID.randomUUID().toString();
        kaptchaVoMap.put("uuid", uuid);
        kaptchaVoMap.put("code", "data:image/png;base64," + base64Code);
        redis0Template.opsForValue().set(captchaPrefix + uuid, kaptchaText, 5, TimeUnit.MINUTES);
        return kaptchaVoMap;
    }

    @Override
    public boolean valid(String uuid, String code) {
        String kaptchaText = redis0Template.opsForValue().get(captchaPrefix + uuid);
        if (kaptchaText != null && kaptchaText.equalsIgnoreCase(code)) {
            redis0Template.delete(captchaPrefix + uuid);
            return true;
        }
        return false;
    }
}

 

标签:code,Springboot,kaptcha,验证码,setProperty,import,properties,uuid
From: https://www.cnblogs.com/namedlxd/p/18408197

相关文章

  • Springboot 统一返回接口
    importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;@Data@AllArgsConstructor@NoArgsConstructorpublicclassCommonResponse<T>{privateTdata;privateStringmessage;privateintcode;public......
  • Springboot LocalDateTime 格式化
    importcom.fasterxml.jackson.databind.ser.std.ToStringSerializer;importcom.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;importcom.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;importcom.fasterxml.jackson.datatype......
  • Springboot枚举自定义序列化
    packagexxxxxxxxxxxxx;importcom.fasterxml.jackson.core.JsonGenerator;importcom.fasterxml.jackson.databind.JsonSerializer;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.fasterxml.jackson.databind.SerializerProvider;importcom.fasterx......
  • 【JAVA开源】基于Vue和SpringBoot员工绩效考核系统
    本文项目编号T021,文末自助获取源码\color{red}{T021,文末自助获取源码}......
  • 【JAVA开源】基于Vue和SpringBoot大学生入学审核系统
    本文项目编号T022,文末自助获取源码\color{red}{T022,文末自助获取源码}......
  • 【JAVA开源】基于Vue和SpringBoot房屋租赁系统
    本文项目编号T020,文末自助获取源码\color{red}{T020,文末自助获取源码}......
  • 摄影分享|基于Springboot的摄影分享网站设计与实现(源码+数据库+文档)
    摄影分享源码|基于SpingBoot+vue的摄影分享网站|摄影分享网站源码影分享网站源码:摄影分享网站能够高效管理,使信息管理方法更为科学和规范化,摄影分享网站应用Java语言表达开展代码编写,摄影分享网站规范化管理信息具备安全性强、工作效率高、内存空间大、成本费用低等特点。它能......
  • 基于Springboot的养老院管理系统设计与实现毕业设计-附源码
    养老院|养老院管理系统源码|养老院管理系统设计与实现|基于Springboot的养老院管理系统养老院管理系统源码:计算机上安装养老院管理系统软件来发挥其高效地信息处理的作用,养老院管理系统的有效运用可以帮助管理人员准确快速地处理信息,养老院管理系统在对开发工具的选择上也很慎......
  • [毕设作品]SpringBoot疫苗在线预约系统
    文章目录前言技术栈功能介绍实现页面截图文章参考我的优势我的个人网站代码参考数据库参考源码获取前言❤️博主简介:全网累计客户1000+,培训机构讲师、全栈开发工程师、知乎/小红书优秀作者、腾讯云/阿里云VIP客户、专注Java、小程序、安卓领域和毕业项目开发❤️⭐️文......
  • 基于SpringBoot的医院管理系统+LW示例参考
    系列文章目录1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例4.基于SSM的高校实验室管理系统+LW参考示例5.基于SpringBoot的二手数码回收系统+原生微信小......