验证码这样做,瞬间高出一个逼格

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 验证码这样做,瞬间高出一个逼格

前言

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

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

行为验证码应用

今天推荐一款非常优秀的行为验证码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>

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. 验证码获取及验证
<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>

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

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

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

@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;
    }
    // 验证通过后,继续登录流程
}

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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
双11 数据安全/隐私保护
这条马桶魔性广告,为何让九牧“抢”了双11的流量密码?
2024年双11,九牧集团凭借创新营销策略,线上销售额超20亿,霸榜多个平台。其“全家桶”广告巧妙结合谐音梗和用户痛点,引发广泛讨论和关注。通过儿童视角展现智能马桶的多功能性,精准触达不同人群,实现高转化率。九牧的成功表明,品牌需在技术创新和年轻化营销上下功夫,才能在竞争中脱颖而出。
73 12
|
设计模式 监控 Java
恭喜胡歌喜提小棉袄一件,彭于晏表示压力很大
恭喜胡歌喜提小棉袄一件,彭于晏表示压力很大
87 0
|
安全 API 开发者
跳出舒适圈,Yahoo! 黑客马拉松 24 小时榨出你的脑力极限
今年在 COSCUP 开源人年会上以「拆政府,原地重建」声名大噪的 g0v 零时政府,成立起源得从 2012 年「Yahoo! Open Hack Day」说起,三位台大资工系系友三天内写出「政府预算视觉量表」,在活动中一战成名,慷慨激昂的斗志并未随著拿到竞赛的佳作奖项而消声匿迹,反而更加凝聚,是年年底,他们组成如今我们都已熟悉的 g0v 零时政府,承袭 Yahoo 参赛的经验,并且利用获奖奖金,召开「第零次动员戡乱黑客松」,以自己的方式继续「骇」政府。
173 0
跳出舒适圈,Yahoo! 黑客马拉松 24 小时榨出你的脑力极限
|
负载均衡 安全 搜索推荐
游戏陪玩源码并非越复杂越好,有时简单才是王道
游戏陪玩源码并非越复杂越好,有时简单才是王道
|
Web App开发 数据可视化 程序员
智能化时代你还在手动刷新浏览器抢火车票?那你就真的Out了!假期快来了,冰河提前放大招,教你如何使用Python脚本自动抢火车票
如果我们手动登陆12306网站,登录时需要输入用户名与密码,然后需要输入蛋疼的验证码,然后选择起、始站,时间,车次类型,点击查询,再选择车次,乘客,提交订单。如果按照这样的手动操作下来,票早已经没有了!!
172 0
|
机器学习/深度学习 传感器 人工智能
等等,那头猪还不想被吃!这个系统能读懂猪的6种情绪,读图3780张,成功率85%
等等,那头猪还不想被吃!这个系统能读懂猪的6种情绪,读图3780张,成功率85%
137 0
钱真的可以“买”到幸福?新研究显示,最低工资每提高1美元,自杀率可减少6%
钱真的可以“买”到幸福?新研究显示,最低工资每提高1美元,自杀率可减少6%
126 0
|
Web App开发 边缘计算 缓存
停课不停学,优酷直播如何将网课点名延迟降到0.6s?
受疫情影响,各中小学校延迟开学,优酷宣布发起“在家上课计划”,为无法到校教学的老师们提供免费的直播授课工具,直播课程将于2月10日开始陆续上线,在直播过程中如何提升和保障流畅的互动体验?优酷直播流媒体团队做了低延时流媒体技术的探索实践,实现了在用户体验不下降的基础上,让主播与主播延时<300ms,播与粉丝延时<600ms,解决了直播间各类互动问题。接下来,阿里文娱的乾戒将具体介绍探索过程。
1462 0
停课不停学,优酷直播如何将网课点名延迟降到0.6s?
|
机器学习/深度学习 供应链 算法
春节剁手的人太少?看手淘怎么做用户增长
小叽导读:本文介绍以手淘促活为目的的全链路智能投放算法框架,该框架目前接入以 Pagani 为核心的全链路运营平台,使用用户意图识别算法圈选出目标人群,借助物料智能推荐和权益动态面额等算法实现全链路上用户的个性化触达干预。以2019春节手淘促活为例,介绍权益智能投放框架的设计思路和实际应用。
1514 0
春节剁手的人太少?看手淘怎么做用户增长
苹果慌了,从死不承认到主动降价,库克只用了4个月
当苹果丧失定价权时,要么损失利润率,要么失去市场份额,或者两者都会失去。
607 0

热门文章

最新文章