🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝
🍓 更多文章请点击
文章目录
一、什么是tianai
二、结构
三、 滑动验证码开发使用
3.1 引入依赖
3.2 代码开发
3.2.1 Controller
3.2.2 DTO
3.2.3 VO
3.2.4 Service
3.2.5 ServiceImpl
3.2.5 设置对应的模板
3.3 代码测试
3.3.1 获取验证码
3.3.2 校验验证滑动验证码
3.4 部分代码解读
一、什么是tianai
tianai-captcha(简称tac)是一款在开源界备受推崇的行为验证码工具。
tianai-captcha的功能展示包括但不限于以下几种验证码类型:
滑块验证码:用户需要拖动滑块到指定位置以完成验证。
旋转验证码:用户需要旋转图片到正确角度以完成验证。
滑动还原验证码:用户需要将分割的图片块滑动到正确位置以还原图片。
文字点选验证码:用户需要从给出的文字选项中选择正确的文字以完成验证。
图标验证码:用户需要识别并点击正确的图标以完成验证。
语序验证码:用户需要将给出的文字或句子按照正确的顺序排列以完成验证。
行为验证码(TAC)在线体验: : https://captcha.tianai.cloud/
二、结构
生成器 (ImageCaptchaGenerator) 主要负责生成行为验证码所需的图片。
校验器 (ImageCaptchaValidator) 主要负责校验用户滑动的行为轨迹是否合规。
资源管理器 (ImageCaptchaResourceManager) 主要负责读取验证码背景图片和模板图片等。
资源存储 (ResourceStore) 负责存储背景图和模板图。
资源提供者 (ResourceProvider) 负责将资源存储器中对应的资源转换为文件流。一般资源存储器中存储的是图片的 URL 地址或 ID,资源提供者则负责将 URL 或其他 ID 转换为真正的图片文件。
图片转换器 (ImageTransform) 主要负责将图片文件流转换成字符串类型,可以是 Base64 格式、URL 或其他加密格式,默认实现为 Base64 格式。
三、 滑动验证码开发使用
3.1 引入依赖
3.2 代码开发
3.2.1 Controller
@RestController
@Slf4j
public class WebSliderCodeController {
@Autowired
private WebSliderCodeService webSliderCodeService;
@PostMapping("slider/get/slidingVerificationCode")
@ApiOperation(value = "获取滑动验证码", notes = "获取滑动验证码")
public Result
SlidingVerificationCodeBO result = webSliderCodeService.getSlidingVerificationCode(dto.getType());
return new Result<>(result);
}
@PostMapping("slider/check/slidingVerificationCode")
@ApiOperation(value = "检查验证滑动验证码", notes = "检查验证滑动验证码")
public Result
Boolean result = webSliderCodeService.checkSlidingVerificationCode(dto.getOnlyKey(), dto.getPercentage());
return new Result<>(result);
}
}
3.2.2 DTO
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SlidingVerificationCodeDTO {
@ApiModelProperty(value = "获取验证码类型,滑动验证码为:SLIDER")
@NotBlank(message = "获取验证码类型不能为空")
private String type;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CheckSlidingVerificationCodeDTO {
@ApiModelProperty(value = "滑块到凹槽的百分比值")
@NotNull(message = "滑块到凹槽的百分比值不能为空")
private Float percentage;
@ApiModelProperty(value = "唯一Key")
@NotBlank(message = "唯一Key不能为空")
private String onlyKey;
}
3.2.3 VO