一、使用的依赖
此处需要引入的依赖hutool-captcha
:
<!-- 获取图形验证码 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-captcha</artifactId>
<version>5.8.18</version>
</dependency>
注:hutool-captcha已经包含在了 hutool-all 中,也可以直接引入 hutool-all。
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.11</version> </dependency>
二、使用依赖
生成验证码的工具是 CaptchaUtil,基本使用方式如下:
/**
* 获取验证码
*/
@Test
public void getCaptcha() throws FileNotFoundException {
//生成带有直线干扰的验证码图片
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(300, 100, 4, 20);//指定(宽,高,验证码数量,干扰项数量)
//获取验证码的信息
System.out.println(lineCaptcha.getCode());//验证码的文本信息,用于校对
//将验证码图片转换为base64格式字符串
System.out.println("不带数据格式前缀:" + lineCaptcha.getImageBase64());//不带数据格式前缀
System.out.println("带数据格式前缀:" + lineCaptcha.getImageBase64Data());//带数据格式前缀
//保存验证码图片
lineCaptcha.write("D:\\@Information\\ceshia\\1.png");//1传保存路径
lineCaptcha.write(new File("D:\\@Information\\ceshia\\2.png"));//2传文件
lineCaptcha.write(new FileOutputStream(new File("D:\\@Information\\ceshia\\3.png")));//3传输出流
boolean b = lineCaptcha.verify("1wcc");//校验用户输入的验证码, b为true表示验证码正确
}
关于base64图片:base64可以将图片转为字符串,将验证码图片以base64格式发送。可以减少http请求次数,同时将图片和对应的key发送到前端页面,而服务器上只需要保存验证码的值和key用来验证即可。
在上例中
lineCaptcha.getImageBase64()
获取的是不带前缀的base64格式图片,发送页面上去后需要手动拼接数据格式前缀才能正常识别图片。而lineCaptcha.getImageBase64Data()
获取的是已经带上数据前缀的字符串,不许要进行额外的处理。
CaptchaUtil
验证码生成工具不只是有createLineCaptcha
一个方法,还有createCircleCaptcha
、createShearCaptcha
和createGifCaptcha
等不同的方法。
它们的区别就是验证码的干扰项不一样。具体使用和区别可以简单浏览下:
/**
* 获取验证码`createCircleCaptcha`
*/
@Test
public void getCaptcha() throws FileNotFoundException {
//生成随机圆圈干扰验证码图片
CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(300, 100, 4, 20);//指定(宽,高,验证码数量,干扰项数量)
//获取验证码的信息
System.out.println(circleCaptcha.getCode());//验证码的文本信息,用于校对
//将验证码图片转换为base64格式字符串
System.out.println("不带数据格式前缀:" + circleCaptcha.getImageBase64());//不带数据格式前缀
System.out.println("带数据格式前缀:" + circleCaptcha.getImageBase64Data());//带数据格式前缀
//保存验证码图片
circleCaptcha.write("D:\\@Information\\ceshia\\1.png");//传保存路径
circleCaptcha.write(new File("D:\\@Information\\ceshia\\2.png"));//传文件
circleCaptcha.write(new FileOutputStream(new File("D:\\@Information\\ceshia\\3.png")));//传输出流
boolean b = lineCaptcha.verify("g2zf");//校验用户输入的验证码, b为true表示验证码正确
}