滑动拼图和文字点选两种类型的验证码

2023-11-06

前言

行为验证码通过用户的操作来完成验证,常见的行为验证码有拖动式和点触式。

拖动式验证就是根据图片显示,将指定的图形拖动到指定位置完成验证。而点触式验证码就是通过鼠标点击出示例中出现的图形完成验证。

行为验证码应用

今天推荐一款非常优秀的行为验证码AJ-Captcha(项目地址https://gitee.com/anji-plus/captcha),这个项目包含了滑动拼图和文字点选两种类型的验证码,除了嵌入式交互,还提供了弹出式交互的方式,完全不影响原UI布局。

AJ-Captcha的验证流程如下:

  1. 用户访问登录页面,发送请求显示行为验证码
  2. 用户按照提示要求完成验证码拼图/点击
  3. 用户提交表单,前端将第二步的输出一同提交到后台
  4. 验证数据随表单提交到后台后,后台需要调用captchaService.verification做二次校验。
  5. 第4步返回校验通过/失败到产品应用后端,再返回到前端。如下图所示。

如果你是Maven开发者,使用起来非常方便,项目的维护人员已经将依赖推送至中央仓库。只需要引入依赖就完成了90%的工作量。接下来只需要在登录接口中进行二次验证就可以了。

项目集成了包括htmlvueflutteruni-appAndroid KotlinIOSphp等多种前端语言,可以轻松将AJ_Captcha集成到项目中。

接下来我们以Spring Boot+html为例看看如何快速集成AJ_Captcha完成行为验证码的交互流程。

第一步、Spring Boot中引入AJ_Captcha依赖

<dependency>
    <groupId>com.anji-plus</groupId>
    <artifactId>spring-boot-starter-captcha</artifactId>
    <version>1.2.9</version>
</dependency>

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5

AJ_Captcha默认实现了验证码生成和验证接口,验证码生成接口的默认请求地址是/captcha/get,验证接口的默认请求地址为/captcha/check。也就是说完成以上步骤,就可以提供给前端获取和验证验证码的接口了。如果你还想让你的验证码生成的个性一点,可以配置以下属性:

# 滑动验证,底图路径,不配置将使用默认图片
# 支持全路径
# 支持项目路径,以classpath:开头,取resource目录下路径,例:classpath:images/jigsaw
aj.captcha.jigsaw=classpath:images/jigsaw
# 滑动验证,底图路径,不配置将使用默认图片
# 支持全路径
# 支持项目路径,以classpath:开头,取resource目录下路径,例:classpath:images/pic-click
aj.captcha.pic-click=classpath:images/pic-click
# 对于分布式部署的应用,我们建议应用自己实现CaptchaCacheService,比如用Redis或者memcache, # 参考CaptchaCacheServiceRedisImpl.java # 如果应用是单点的,也没有使用redis,那默认使用内存。 # 内存缓存只适合单节点部署的应用,否则验证码生产与验证在节点之间信息不同步,导致失败。 # !!! 注意啦,如果应用有使用spring-boot-starter-data-redis, # 请打开CaptchaCacheServiceRedisImpl.java注释。 # redis -----> SPI: 在resources目录新建META-INF.services文件夹(两层),参考当前服务resources。 # 缓存local/redis... aj.captcha.cache-type=local # local缓存的阈值,达到这个值,清除缓存 #aj.captcha.cache-number=1000 # local定时清除过期缓存(单位秒),设置为0代表不执行 #aj.captcha.timing-clear=180 #spring.redis.host=10.108.11.46 #spring.redis.port=6379 #spring.redis.password= #spring.redis.database=2 #spring.redis.timeout=6000
# 验证码类型default两种都实例化。 aj.captcha.type=default # 汉字统一使用Unicode,保证程序通过@value读取到是中文,可通过这个在线转换;yml格式不需要转换 # https://tool.chinaz.com/tools/unicode.aspx 中文转Unicode # 右下角水印文字(我的水印) aj.captcha.water-mark=\u6211\u7684\u6c34\u5370 # 右下角水印字体(不配置时,默认使用文泉驿正黑) # 由于宋体等涉及到版权,我们jar中内置了开源字体【文泉驿正黑】 # 方式一:直接配置OS层的现有的字体名称,比如:宋体 # 方式二:自定义特定字体,请将字体放到工程resources下fonts文件夹,支持ttf\ttc\otf字体 # aj.captcha.water-font=WenQuanZhengHei.ttf # 点选文字验证码的文字字体(文泉驿正黑) # aj.captcha.font-type=WenQuanZhengHei.ttf # 校验滑动拼图允许误差偏移量(默认5像素) aj.captcha.slip-offset=5 # aes加密坐标开启或者禁用(true|false) aj.captcha.aes-status=true # 滑动干扰项(0/1/2) aj.captcha.interference-options=2
aj.captcha.history-data-clear-enable=false
# 接口请求次数一分钟限制是否开启 true|false aj.captcha.req-frequency-limit-enable=false # 验证失败5次,get接口锁定 aj.captcha.req-get-lock-limit=5 # 验证失败后,锁定时间间隔,s aj.captcha.req-get-lock-seconds=360 # get接口一分钟内请求数限制 aj.captcha.req-get-minute-limit=30 # check接口一分钟内请求数限制 aj.captcha.req-check-minute-limit=60 # verify接口一分钟内请求数限制 aj.captcha.req-verify-minute-limit=60
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

第二步、前端伪代码调用接口

  1. 引入验证码的样式以及验证等文件
  2. 验证码获取及验证
<script>
    $('#content').slideVerify({
    baseUrl:'http://localhost:8080/',  //服务器请求地址, 默认地址为安吉服务器;
    containerId:'btn',//pop模式 必填 被点击之后出现行为验证码的元素id
    mode:'pop',     //展示模式
    imgSize : {       //图片的大小对象,有默认值{ width: '310px',height: '155px'},可省略
        width: '400px',
        height: '200px',
    },
    barSize:{          //下方滑块的大小对象,有默认值{ width: '310px',height: '50px'},可省略
        width: '400px',
        height: '40px',
    },
    beforeCheck:function(){  //检验参数合法性的函数  mode ="pop"有效
        let flag = true;
        //实现: 参数合法性的判断逻辑, 返回一个boolean值
        return flag
    },
    ready : function() {},  //加载完毕的回调
    success : function(params) { //成功的回调
        // params为返回的二次验证参数 需要在接下来的实现逻辑回传服务器
        例如: login($.extend({}, params))
    },
    error : function() {}        //失败的回调
});
</script>

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

验证码验证成功之后,会返回一个用于二次验证的串码。

第三步,用户登录,二次验证

客户端登录的时候携带验证成功后返回的串码,在登录接口中进行二次验证,验证流程完毕。

@Autowired
private CaptchaService captchaService;
/**
  * 页面获取token
  * 大屏数据校验
  * @param user
  * @return
  */
@PostMapping("getWebToken")
public ResultBean getWebToken(@RequestBody LoginUser user,String captchaVerification){
    ResultBean resultBean = new ResultBean();
    CaptchaVO captchaVO = new CaptchaVO();
    captchaVO.setCaptchaVerification(captchaVerification);
    ResponseModel responseModel = captchaService.verification(captchaVO);
    if(!responseModel.isSuccess()){
        resultBean.fillCode(0,responseModel.getRepMsg());
        return resultBean;
    }
    // 验证通过后,继续登录流程
}

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

今天的内容就介绍到这里了,趁这个机会,试着使用这款高颜值的行为验证码来替换项目中的图形验证码吧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

滑动拼图和文字点选两种类型的验证码 的相关文章

随机推荐

  • Linux基础命令

    Linux基础命令 ls 列出 英文全称 list 格式 ls options 选项 arges 参数 root localhost ls l 总用量 4 rw 1 root root 1297 3月 18 02 38 anaconda k
  • log level

    一 LK层 首先 在LK中 有一个对log打印级别的控制文档 其路径一般为 vendor mediatek proprietary bootable bootloader lk include debug h 以mtk平台为例 在inclu
  • 机器学习-

    可用数据集 kaggle UCI scikit learn kaggle 网址 https www kaggle com datasets UCI 网址 https archive ics uci edu ml scikit learn 网
  • UE4 安卓AR 识别图片

    UE4 安卓AR 识别图片 开启一个插件 准备一个只有玩家出生点的场景 这个场景用来做识别图片的 新建一个游戏模式 设置好默认的pawn类 一个摄像机就行了 代表手机开启AR会话后的那个相机 然后gamemode 事件开始运行 就直接开启A
  • C/C++堆溢出(stack overflow)的解决

    问题 堆溢出 stack overflow 解决 1 在VS里面设置 属性 链接器 系统 堆栈保留大小 2 通过代码 第一个值是堆栈的保留空间 第二个值是堆栈开始时提交的物理内存大小 堆栈改变为100M pragma comment lin
  • 用Arduino和蓝牙模块做一个开门装置

    用Arduino和蓝牙模块做一个开门装置 闲来无事 给门上装一个不用钥匙开门的装置 如图 学校很老的锁也搞不出什么花样了 就拿个舵机拉根杜邦线拽着锁 很简单的东西 做着玩玩 好吧 我承认看着有点 低电平 用的好像是HC04蓝牙模块吧 就网上
  • C++中函数对象(仿函数)的基本使用

    什么是函数对象 重载函数调用操作符的类 称其为函数对象 函数对象使用重载的 行为类似函数调用 也叫仿函数 1 函数对象在使用的时候 可以像普通函数那样调用 可以有参数 有可以有返回值 但本质上并不是一个函数 而是一个对象 类名 class
  • xxl-job的使用

    1 下载xxl job调度中心代码 可从这两个地址下载 https github com xuxueli xxl job https gitee com xuxueli0323 xxl job 2 下载后解压用idea打开 目录 doc d
  • 在浏览器中输入网址后回车发生了哪些事情

    最近在和许多同学交流面经的时候 发现有一个问题 无论你是前端开发 还是后端开发 被问到的概率很高 在此 我想把这个问题记录一下 总体来说 在浏览器的地址栏中输入网址后 发生了如下的事情 DNS解析 TCP连接 发送HTTP请求 服务器处理请
  • jenkins生成html测试报告和新增用户

    这里仅记录一下踩过的坑 1 新增用户 2 html报告的生成 构建报错1 jenkinsModuleNotFoundError No module named pytest html 或者报错 jenkins 执行提示 pytest err
  • 程序员就业和发展前景,一文带你了解

    程序员 英文是 code worker 顾名思义就是计算机程序的作者 它通常指从事计算机软件开发的人员 当然也包括用计算机语言编写程序来进行各种信息处理的人 现在软件行业中 程序员属于技术含量较高的一个群体 程序员就业和发展前景也是在众多行
  • 微信小程序-伸缩性最强的table组件

    微信小程序 伸缩性最强的table组件 微信小程序很大的一个诟病之一就是没有table组件 小程序中正常显示表格依然是令人头痛的问题 下面使用flex布局模拟现实一个小程序的table组件 支持内容过多滑动 设置单元格宽度等 1 效果图 微
  • Java---System类,RunTime类,Random类

    System类 系统类 主要获取系统的属性数据 还有标准的输入 输出及错误输出流 主要介绍一些常用的方法 1 数组拷贝 arraycopy Object src int srcPos Object dest int destPos int
  • open3d显示rope3d标注内容

    open3d是我发现比较好用且功能全面的3D库 下面演示显示rope3d的标注内容 其他调用的库有pandaset geometry等 usr bin env python3 coding utf 8 import pcl import o
  • 关于联想G480BIOS中的设置

    由于一段时间对笔记本电脑中的BIOS设置很感兴趣 故在网上搜索一下 找到这篇博客 为了以后那天能用上就先转载一下 以备后用 地址为 关于G480BIOS设置
  • 微信小程序登录问题--第一次登录失败刷新再次登录成功问题

    出现这样问题都是先获取用户信息wx getUserInfo encryptedData与iv 再进行登录wx login 获取code code是用来生成session key用来解密encryptedData与iv的 所以等你先获取用户e
  • Java实现二阶魔方旋转

    魔方可以对它的6个面自由旋转 我们来操作一个2阶魔方 如图1所示 为了描述方便 我们为它建立了坐标系 各个面的初始状态如下 x轴正向 绿 x轴反向 蓝 y轴正向 红 y轴反向 橙 z轴正向 白 z轴反向 黄 假设我们规定 只能对该魔方进行3
  • linux延迟函数sleep

    include
  • 不用密码卸载symantec

    之前在某公司实习的时候 需要安装这个软件 后面尝试了很多网上的方法 都无法卸载掉 最后还是使用了杀手锏 官方的卸载软件cleanwipe 按照步骤 很简单的就卸载掉了 这里附上链接 最后面的附件可以下载 Download the Clean
  • 滑动拼图和文字点选两种类型的验证码

    前言 行为验证码通过用户的操作来完成验证 常见的行为验证码有拖动式和点触式 拖动式验证就是根据图片显示 将指定的图形拖动到指定位置完成验证 而点触式验证码就是通过鼠标点击出示例中出现的图形完成验证 行为验证码应用 今天推荐一款非常优秀的行为