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验证码使用教程源码解读相关推荐

  1. Quantopian教程源码解析及实战

    Quantopian教程源码解析及实战 ​ 本文主要侧重于采用Quantopian进行实际的金融策略分析,因此阅读本文前,需要对Quantopian的有基本的了解,建议先阅读Quantopian的tu ...

  2. 易语言 服务器 xml,易语言XML支持库入门教程源码

    易语言XML支持库入门教程系统结构:易语言XML支持库入门教程源码,XML支持库入门教程 ======窗口程序集1 || ||------_按钮_创建XML_被单击 || ||------_按钮_释放 ...

  3. css如何在html中链接代码,怎么在html中链接css文件?怎么链接css文件教程源码!...

    在我们的平常学习中,每一个课时和每一个知识点直接都是有关联的,那么今天我们就来说说怎么在html中链接css文件,下面是小编为大家准备的一些链接css文件教程源码! 1.行内式 这是一种直接在html ...

  4. Tomcat启动过程源码解读

    根据Tomcat源码来看一下Tomcat启动过程都做了什么 部分代码为主要流程代码,删去了try-catch以及一些校验逻辑,方便理解主流程 先来一张启动过程时序图,了解一下启动顺序 Tomcat启动 ...

  5. 以下未发布-Android的多线程以及异步消息处理机制,android移动开发基础案例教程源码

    1.Message: Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间进行数据交换.除了 what 字段,还可以使用 arg1 和 arg2 来携带整型数据,使用 ...

  6. 1.1XAF框架开发视频教程-简单的订单管理实现过程,视频,提纲,及教程源码

    下面是视频教程的提纲: PPT版本的提纲下载 本节源码下载 XAF框架开发教程 快速实现企业级信息系统开发的利器 XAF简介 ´  开发公司:www.devexpress.com,老牌控件公司 ´  ...

  7. mysql教程源码_MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图...

    一:背景 1. 讲故事 最近看各大技术社区,不管是知乎,掘金,博客园,csdn基本上看不到有小伙伴分享sqlserver类的文章,看样子这些年sqlserver没落了,已经后继无人了,再写sqlser ...

  8. php - 使用 phpqrcode.php 生成二维码图片,同时并将生成的二维码图片保存到本地服务器中(详细示例教程源码)

    效果图 网上的教程都太乱了,不好移植到自己的项目中. 最终效果,如下图所示: 你可以直接复制本文提供的方法,稍微改改就能应用到你的项目中去. 示例代码干净整洁,注释超级详细 示例源码 首先需要引入 p ...

  9. php教程源码分享,php教程|php源码|php学习

    echo "今天:".date("Y-m-d")." "; echo "昨天:".date("Y-m-d&qu ...

最新文章

  1. 【ios开发/Xcode】使用UITableView完成学生信息及成绩的显示
  2. 隐含狄利克雷分布(Latent Dirichlet Allocation,LDA)
  3. PMCAFF原创文章人气周榜第三期(原创干货由你评鉴,在评论里写下你的看法吧~)
  4. list.h在用户态下的应用
  5. Android之百度地图定位最详细使用总结
  6. 你连简单的枚举类都不知道,还敢说自己会Java???滚出我的公司
  7. 崩管嵌入式还是单片机,盘就完事了
  8. 计算机设置从u盘启动怎么办,电脑设置从u盘启动盘启动出现蓝屏该怎么解决?
  9. Pandas to_numeric
  10. Redis(十五)Redis 的一些常用技术(Spring 环境下)
  11. containerd
  12. css3扭蛋机,微信小程序 扭蛋抽奖机CSS3动画实现详解_咋地 _前端开发者
  13. java设计四个按钮分别命名为,计算器 1.0
  14. 梅科尔工作室苏慎臻,鸿蒙实战项目
  15. 全中国的程序员,联合起来
  16. 双系统安装教程(win10 ubuntu20.04)
  17. 【纯新手】小白的第一次面试经过(字节跳动-懂车帝)
  18. 数据压缩作业二:PNG图像格式分析
  19. Map根据Key值进行排序(升序加降序)
  20. ABAP中的loop

热门文章

  1. java实现多人聊天室+私聊+Derby数据库
  2. springfox源码_【开源项目】springfox-bridge:随心所欲地为非restful接口生成API文档...
  3. LncACTdb:lncRNA相关的ceRNA网络数据库
  4. 当不想前行的时候,就静静的看看书吧
  5. java通过与4g模块DTU通信控制串口设备PLC解决方案
  6. c语言圈复杂度switch,软件度量-圈复杂度
  7. 解决Win7无法关机或关机慢的问题
  8. 泛函分析(1)-泛函简介与实践
  9. 奈奎斯特准则、比特率、波特率、码元……的逻辑链
  10. 魔众文档管理系统 v4.4.0 常规优化升级 系统更稳定