上海如何做网站,生成器软件,手游开发,吉林省建设厅网站杨学武目录 前言1. 复用验证码2. 源码解读2.1 先走DefaultCaptchaServiceImpl类2.2 核心ClickWordCaptchaServiceImpl类 3. 具体使用 前言
对于Java的基本知识推荐阅读#xff1a;
java框架 零基础从入门到精通的学习路线 附开源项目面经等#xff08;超全#xff09;【Java项目… 目录 前言1. 复用验证码2. 源码解读2.1 先走DefaultCaptchaServiceImpl类2.2 核心ClickWordCaptchaServiceImpl类 3. 具体使用 前言
对于Java的基本知识推荐阅读
java框架 零基础从入门到精通的学习路线 附开源项目面经等超全【Java项目】实战CRUD的功能整理持续更新
对于源码可以直接使用anji-plus/AJ-Captcha
1. 复用验证码 下载源码之后配置好Maven项目直接启用Springboot的项目 对应修改前端的启动网址配置 最终截图如下 2. 源码解读
通过断点具体走一遍完整逻辑 具体请求地址走向如下 对应check中的Service类ResponseModel check(CaptchaVO captchaVO); 先跳入DefaultCaptchaServiceImpl类
之后检查相应的类型校验传入的CaptchaVO对象并根据验证码类型调用相应的服务进行验证 从CaptchaServiceFactory中获取对应验证码类型的服务实例 单看它的工厂类 使用ServiceLoader动态加载所有实现了CaptchaCacheService和CaptchaService接口的类将加载到的服务实例存储在cacheService和instances这两个Map中键为各自服务的类型由type()或captchaType()方法返回记录日志输出支持的验证码缓存服务和验证码类型服务
总体就是map的实例化对象通过key value
2.1 先走DefaultCaptchaServiceImpl类
基本的配置类主要由两个大配置类组成 对应的配置类走向设置 配置类配置默认值 对应的参数如下 但是我的默认值不是DefaultCaptchaServiceImpl么对应只需要在源码中再次设置即可 2.2 核心ClickWordCaptchaServiceImpl类
实现了验证码的初始化、生成、校验和验证等功能
读取配置从配置文件中读取字体类型、字体大小等配置初始化字体根据配置文件中指定的字体类型和大小初始化字体对象异常处理如果字体加载失败记录错误日志 生成图片调用ImageUtils.getPicClick()生成点击验证码图片检查图片有效性如果图片未初始化成功或获取的图片数据无效返回错误信息返回结果将生成的图片数据返回给前端 获取缓存中的验证码数据从缓存中获取验证码对应的坐标信息并删除缓存记录。解析坐标数据将坐标信息进行解密并解析成坐标对象。验证坐标信息检查用户点击的坐标是否与生成验证码时的坐标匹配。异常处理如果解析失败或坐标不匹配返回错误信息。成功处理将验证成功的信息存入缓存并返回成功结果 总体就是
初始化从配置文件中读取字体和其他配置信息初始化验证码生成所需的资源生成验证码生成点击文字验证码图片并返回给前端校验验证码从缓存中获取验证码的坐标信息解析并验证用户点击的坐标是否正确验证验证码二次验证时从缓存中获取并验证验证码信息确保验证码的唯一性和时效性
3. 具体使用
由于自身的项目使用已经引入大致细节如下
可结合他人教程阅读行为验证码AJ-Captcha快速入门
引入依赖包
!--验证码--
dependencygroupIdcom.github.anji-plus/groupIdartifactIdcaptcha-spring-boot-starter/artifactIdversion1.2.7/version
/dependency默认依赖就存在 CaptchaController类可以不用写
只需复制前端所有内容即可
如果需要重写对应的后端关键内容是 还有图片的导入以及路径的修改 再次解读下这个方法
public static final String getRemoteId(HttpServletRequest request) {String xfwd request.getHeader(X-Forwarded-For);String ip getRemoteIpFromXfwd(xfwd);String ua request.getHeader(user-agent);if (StringUtils.isNotBlank(ip)) {return ip ua;}return request.getRemoteAddr() ua;}getRemoteId 方法负责拼接客户端的 IP 地址和用户代理User-Agent信息
这些信息将用于生成或校验验证码时的上下文信息以增加验证码的安全性