AJ-Captcha验证码使用教程源码解读
1.背景
验证码的主要作用是防止机器人恶意使用我们的程序........
今天我们结束一款强大的验证码组件:aj-captcha
官方文档:AJ-Captcha在线体验
大家一定要认真阅读官方文档,比较全面,比我写的博客好得多....我在这里写博客主要是梳理一下自己使用这个组件的思路,以及记录一下个人觉得重要不好理解的地方....
2.项目启动与快速测试
启动后端:
快速页面测试:
使用浏览器访问这个页面
在没有修改后端源码的情况下,会直接请求到localhost:8080下.....
效果如果下:
初次使用这个时,大家可以重点留意一下get 与 check方法的入参和返回值,便于对整个模块的理解
3.重要源码解读
3.1.CaptchaService 实例化的设计
源码太多...这里我们从读懂代码的角度去理解....
首先我们来看一下我们找到请求入口....从访问的请求地址+上断点调试...找到入口是如下:
其实要理解的重点就是这个3个接口,先看第一个接口get,获取验证码
当我们要点击进去看具体实现方法时,这时候发现有多个具体实现.....
这时候我们就要思考,代码执行的时候到底执行哪一个实现类呢?
从断点调试看,使用的是DefaultCaptchServiceImpl.....为什么使用它呢?
这里有一堆问题.....
不要着急....断点进去看看,到底怎么执行的...
继续往里面看,要看懂: CaptchaServiceFactory.instances.get(captchaType); 这行代码...跟踪进去..你会豁然开朗...
原来就是spring的设计模式,把所有实现类通过key value的方式加载到map中,使用的时候通过map的key去获取具体实例化的对象....就这么简单......
慢点慢点别激动.....还有一个问题,为什么DefaultCaptchaServiceImpl首先要使用这个实例呢....继续看初始化的源码.....
看到启动的配置类
在继续看这行代码:CaptchaService s = CaptchaServiceFactory.getInstance(config);
在看看我们的配置文件application.properties
aj.captcha.type=default
现在明白了吧....
3.2.缓存方式的逻辑设计
设计方式与CaptchaService 实例化设计的逻辑一样的,都是利用map的设计思路
3.3.验证码的逻辑
来自官网的交互图,我觉得这图很nice.....
get验证码时:
以key value的方式将位置信息放入服务端,源码如下:
值得注意的是,这里位置信息里面有一个aes加密使用的secretKey,会将这个值给到前端,前端用于加密使用....
check检查验证码时:
值得注意时检查通过后,会将二次验证的key value放入缓存,在提交表达的时候检查这个二次验证的key是否存在....大家重点读懂 key的计算规则
AES(token+"---"+前端坐标明文字符串, 加密key) 是按照这个计算逻辑的,在二次验证提交表达时前端需要按照这个计算规则计算出key与表单一起提交到后台....
verify二次验证:
这个就很简单了......根据前端计算的key(AES(token+"---"+前端坐标明文字符串, 加密key)在缓存中看,是否存在...存在这执行你的业务,否则向前端提示验证过期之类的.....
完美
AJ-Captcha验证码使用教程源码解读相关推荐
- Quantopian教程源码解析及实战
Quantopian教程源码解析及实战 本文主要侧重于采用Quantopian进行实际的金融策略分析,因此阅读本文前,需要对Quantopian的有基本的了解,建议先阅读Quantopian的tu ...
- 易语言 服务器 xml,易语言XML支持库入门教程源码
易语言XML支持库入门教程系统结构:易语言XML支持库入门教程源码,XML支持库入门教程 ======窗口程序集1 || ||------_按钮_创建XML_被单击 || ||------_按钮_释放 ...
- css如何在html中链接代码,怎么在html中链接css文件?怎么链接css文件教程源码!...
在我们的平常学习中,每一个课时和每一个知识点直接都是有关联的,那么今天我们就来说说怎么在html中链接css文件,下面是小编为大家准备的一些链接css文件教程源码! 1.行内式 这是一种直接在html ...
- Tomcat启动过程源码解读
根据Tomcat源码来看一下Tomcat启动过程都做了什么 部分代码为主要流程代码,删去了try-catch以及一些校验逻辑,方便理解主流程 先来一张启动过程时序图,了解一下启动顺序 Tomcat启动 ...
- 以下未发布-Android的多线程以及异步消息处理机制,android移动开发基础案例教程源码
1.Message: Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间进行数据交换.除了 what 字段,还可以使用 arg1 和 arg2 来携带整型数据,使用 ...
- 1.1XAF框架开发视频教程-简单的订单管理实现过程,视频,提纲,及教程源码
下面是视频教程的提纲: PPT版本的提纲下载 本节源码下载 XAF框架开发教程 快速实现企业级信息系统开发的利器 XAF简介 ´ 开发公司:www.devexpress.com,老牌控件公司 ´ ...
- mysql教程源码_MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图...
一:背景 1. 讲故事 最近看各大技术社区,不管是知乎,掘金,博客园,csdn基本上看不到有小伙伴分享sqlserver类的文章,看样子这些年sqlserver没落了,已经后继无人了,再写sqlser ...
- php - 使用 phpqrcode.php 生成二维码图片,同时并将生成的二维码图片保存到本地服务器中(详细示例教程源码)
效果图 网上的教程都太乱了,不好移植到自己的项目中. 最终效果,如下图所示: 你可以直接复制本文提供的方法,稍微改改就能应用到你的项目中去. 示例代码干净整洁,注释超级详细 示例源码 首先需要引入 p ...
- php教程源码分享,php教程|php源码|php学习
echo "今天:".date("Y-m-d")." "; echo "昨天:".date("Y-m-d&qu ...
最新文章
- 【ios开发/Xcode】使用UITableView完成学生信息及成绩的显示
- 隐含狄利克雷分布(Latent Dirichlet Allocation,LDA)
- PMCAFF原创文章人气周榜第三期(原创干货由你评鉴,在评论里写下你的看法吧~)
- list.h在用户态下的应用
- Android之百度地图定位最详细使用总结
- 你连简单的枚举类都不知道,还敢说自己会Java???滚出我的公司
- 崩管嵌入式还是单片机,盘就完事了
- 计算机设置从u盘启动怎么办,电脑设置从u盘启动盘启动出现蓝屏该怎么解决?
- Pandas to_numeric
- Redis(十五)Redis 的一些常用技术(Spring 环境下)
- containerd
- css3扭蛋机,微信小程序 扭蛋抽奖机CSS3动画实现详解_咋地 _前端开发者
- java设计四个按钮分别命名为,计算器 1.0
- 梅科尔工作室苏慎臻,鸿蒙实战项目
- 全中国的程序员,联合起来
- 双系统安装教程(win10 ubuntu20.04)
- 【纯新手】小白的第一次面试经过(字节跳动-懂车帝)
- 数据压缩作业二:PNG图像格式分析
- Map根据Key值进行排序(升序加降序)
- ABAP中的loop
热门文章
- java实现多人聊天室+私聊+Derby数据库
- springfox源码_【开源项目】springfox-bridge:随心所欲地为非restful接口生成API文档...
- LncACTdb:lncRNA相关的ceRNA网络数据库
- 当不想前行的时候,就静静的看看书吧
- java通过与4g模块DTU通信控制串口设备PLC解决方案
- c语言圈复杂度switch,软件度量-圈复杂度
- 解决Win7无法关机或关机慢的问题
- 泛函分析(1)-泛函简介与实践
- 奈奎斯特准则、比特率、波特率、码元……的逻辑链
- 魔众文档管理系统 v4.4.0 常规优化升级 系统更稳定