使用Kaptcha生成图片验证码

  • kaptcha是什么?
  • kaptcha使用步骤
  • kaptcha代码实例
    • 引入依赖
    • 图片验证码配置类
    • 自定义结果返回类
    • 生成验证码
    • 返回结果枚举

kaptcha是什么?

使用kaptcha生成验证码的作用:进行人机校验–防止机器脚本,自动大量注册用户。

1.Kaptcha是谷歌开源的可高度配置的实用验证码生成工具。

2.通过Kaptcha可阻拦大多数机器人脚本操作。

3.kaptcha典型殷勇于注册、登录、重要信息提交等用户交互

kaptcha使用步骤

1.引入kaptcha依赖
2.创建kaptcha配置类
3.创建Controller类,生成验证码

kaptcha代码实例

引入依赖

     <dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version></dependency>

图片验证码配置类

import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
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 {/*** Kaptcha图形验证码工具配置类*/@Beanpublic Producer kaptchaProducer() {// 实例一个DefaultKaptchaDefaultKaptcha defaultKaptcha = new DefaultKaptcha();// 创建配置对象Properties properties = new Properties();// 设置边框properties.setProperty(Constants.KAPTCHA_BORDER, "yes");// 设置颜色properties.setProperty(Constants.KAPTCHA_BORDER_COLOR, "105,179,90");// 设置字体颜色properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black");// 设置宽度properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, "125");// 高度properties.setProperty(Constants.KAPTCHA_IMAGE_HEIGHT, "50");// 设置session.keyproperties.setProperty(Constants.KAPTCHA_SESSION_CONFIG_KEY, "code");// 设置文本长度properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");// 设置字体properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");// 设置图片样式properties.setProperty(Constants.KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");// 将以上属性设置为实例一个DefaultKaptcha的属性Config config = new Config(properties);defaultKaptcha.setConfig(config);// 将defaultKaptcha返回return defaultKaptcha;}
}

自定义结果返回类

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;import static com.qyzb.base.result.ResultCode.FAILURE;
import static com.qyzb.base.result.ResultCode.SUCCESS;@Data
@ApiModel("返回结果")
public class R<T> {/*** 错误码*/@ApiModelProperty("错误码")private Integer code;/*** 错误消息*/@ApiModelProperty("错误消息")private String msg;/*** 内容*/@ApiModelProperty("内容")private T data;public static <U> R<U> toResult(int rows) {return rows > 0 ? R.success() : R.failure();}public static <U> R<U> success() {return of(SUCCESS, null, null);}public static <U> R<U> success(U data) {return of(SUCCESS, null, data);}public static <U> R<U> failure() {return of(FAILURE, null, null);}public static <U> R<U> failure(ResultCode resultCode) {return of(resultCode, null, null);}public static <U> R<U> failure(ResultCode resultCode, String detail) {return of(resultCode, detail, null);}public static <U, E extends CodeException> R<U> exception(E ex) {return failure(ex.getCode(), ex.getDetail());}public static <U> R<U> of(ResultCode resultCode, String detail, U data) {R<U> result = new R<>();result.code = resultCode.code();if (StringUtils.isEmpty(detail)) {result.msg = resultCode.message();} else {//覆盖消息result.msg = detail;}result.data = data;return result;}
}

生成验证码

import com.google.code.kaptcha.Producer;import com.qyzb.base.result.R;
import com.qyzb.base.result.ResultCode;
import com.qyzb.jwt.annotation.PassToken;
import com.qyzb.redis.RedisCache;
import com.qyzb.util.UUIDUtil;
import com.sun.jersey.core.util.Base64;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.image.BufferedImage;
import java.io.IOException;import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;@RestController
@RequestMapping("/kaptcha")
@Api(value = "验证码" , tags = "验证码")
public class KaptchaController {@Autowiredprivate Producer kaptchaProduer;@Resourceprivate RedisCache redisCache;@GetMapping("/image-code")@ApiOperation("生成图片验证码")public R<?> getKaptcha(HttpServletResponse response, HttpSession session){String imagecode = kaptchaProduer.createText();// 生成图片BufferedImage image = kaptchaProduer.createImage(imagecode);// 将验证码存入Sessionsession.setAttribute("kaptcha",imagecode);//将图片输出给浏览器String uuid = UUIDUtil.getUUID();//uuid-->验证码唯一标识FastByteArrayOutputStream os = new FastByteArrayOutputStream();try {response.setContentType("image/png");ImageIO.write(image,"png",os);//验证码实现redis缓存,过期时间2分钟session.setAttribute("uuid",imagecode);redisCache.add(uuid,imagecode,2, TimeUnit.MINUTES);} catch (IOException e) {return R.failure(ResultCode.of(e.getMessage()));}Map<String , Object> data = new HashMap<>();data.put("uuid" , uuid);data.put("img" , Base64.encode(os.toByteArray()));return R.success(data);}}

返回结果枚举

import org.apache.commons.lang3.ObjectUtils;public enum ResultCode {SUCCESS(200,"成功"),FAILURE(500,"失败"),ERROR(10000,"未知原因出错"),SERVICE_ERROR(50000,"服务器异常");ResultCode(Integer code, String message) {this.code = code;this.message = message;}private Integer code;private String message;public Integer code() {return this.code;}public String message() {return this.message;}public static ResultCode of(String message) {if (ObjectUtils.isEmpty(message)) {throw new RuntimeException("参数错误");}for (ResultCode resultCode : values()) {if (resultCode.message.equals(message)) {return resultCode;}}return ERROR;}}

使用Kaptcha生成图片验证码相关推荐

  1. Kaptcha 图像验证码

    简介: kaptcha是一个可高度配置的使用验证码生成工具,可自由配置的选项如: 验证码字体 验证码字体的大小 验证码字体的字体颜色 验证码内容的范围(数字.字母.中文汉字!) 验证码图片的大小.边框 ...

  2. 使用kaptcha生成验证码

    2019独角兽企业重金招聘Python工程师标准>>> kaptcha是一个简单好用的验证码生成工具,通过配置,可以自己定义验证码大小.颜色.显示的字符等等.下面就来讲一下如何使用k ...

  3. Java Web学习总结(22)——使用kaptcha生成验证码

    kaptcha是一个简单好用的验证码生成工具,通过配置,可以自己定义验证码大小.颜色.显示的字符等等.下面就来讲一下如何使用kaptcha生成验证码以及在服务器端取出验证码进行校验. 一.搭建测试环境 ...

  4. 【项目】springboot中使用kaptcha生成验证码,登录时密码加盐处理

    记录使用kaptcha的过程 为前后端分离项目,前端vue框架 文章目录 0.下载jar包 1.添加依赖 2.添加KaptchaConfig配置 3.后端用于登录的封装类编写 4.修改controll ...

  5. 全网最新Redis结合Kaptcha实现验证码功能篇一(前后端分离)

    文章目录 前言 一.导入Kaptcha依赖包 二.使用步骤 1.验证码配置类 2.获取验证码接口 3.Vue页面 4.去除背景 5.自定义背景以及验证码随机规则 总结 前言 Google 的 kapt ...

  6. 后端生成图片验证码,Kotlin生成图片验证码,Java生成图片验证码,图片验证码的生成和校验

    后端生成图片验证码 注:以下代码主要使用kotlin进行编写,kotlin可兼容java,可以直接使用.IDEA也支持将java与kotlin代码进行互相转换. 1.引入依赖: Gradle(若你使用 ...

  7. 常用工具类之使用kaptcha生成验证码

    验证码的作用 防止恶意破解密码.刷票.论坛灌水.刷页. 有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,实际上使用验证码是现在很多网站通行的方式(比如招商银行的网上个人银 ...

  8. springmvc使用谷歌captcha生成图片验证码,并将验证码图片以二进制流的方式返回给前端(app和pc端都能调用)

    近期对登录注册与获取短信验证码的接口做了安全限制,其中一部分就用到了谷歌的captcha验证码,比如当用户连续三次登陆失败,那么之后的登录请求就需要用户输入谷歌的图形验证码.由于web端和app端调用 ...

  9. 【Spring Boot组件集成实战】集成Kaptcha谷歌验证码

    更多精彩内容,请访问 Spring Boot组件集成实战专栏 ! 推荐项目:一套基于Spring Boot+Layui的内容管理系统/快速开发脚手架(含完整的开发文档.演示网址等) 文章目录 1. 验 ...

最新文章

  1. SAP RETAIL 通过自动补货功能触发的采购申请有些啥特殊的地方?
  2. java url使用rest风格_Restful风格的URL请求
  3. etcd代理组件的开发思想
  4. 《系统集成项目管理工程师》必背100个知识点-100信息技术服务标准
  5. MyEclipse使用总结——使用MyEclipse打包带源码的jar包
  6. 多线程编程:阻塞、并发队列的使用总结
  7. Bw树:新硬件平台的B树(内存数据库中的b树索引)
  8. 计算机主机硬件详细介绍,计算机系统的硬件和系统软件详细介绍
  9. 实体类多层嵌套 遍历_JS获取元素多层嵌套思路详解
  10. 在URL中使用另一个url作为参数时会被``截断的问题
  11. Tensorflow:可视化学习TensorBoard
  12. 2013-07-23 IT 要闻速记快想
  13. [.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能
  14. JVM调优-JVM调优实践一
  15. matlab 结构体struct函数使用方法
  16. Bugzilla的安装和配置
  17. javafx教程大全
  18. 教你“强人锁男”——java并发编程的常用锁类型
  19. IO流常用类使用详解
  20. 【moeCTF题解-0x04】Crypto

热门文章

  1. 2017qq红包雨最强攻略
  2. Springboot, link failure、SSL peer shut down incorrectly、Unsupported record version Unknown-0.0问题
  3. 使用CMD更改IP地址
  4. VSCode C/C++ Theme主题自定义配色方案
  5. JDK1.8新特性 Optional判空详解,简化判空操作
  6. JBAS011232: Only one JAX-RS Application Class allowed. com.sun.jersey
  7. 如何从Vant Weapp、MinUI、iView Weapp、Wux Weapp、ColorUI共5个小程序组件库选型 转载
  8. JavaScript核心知识总结(下)
  9. VMware不识别U盘
  10. threejs学习笔记:CSS2DObject 2d文字渲染