当前位置: 首页 > news >正文

从 0 到 1 搭建验证码服务:滑块 + 行为验证的工程实现

Spring Boot 验证码微服务(生产骨架)

✅ 滑块验证码 ✅ 行为验证码(无感 + 风控评分) ✅ Redis 状态 / Token / TTL ✅ 风险分级 → 决策 ✅ 可扩展点(模型 / 点选 / 短信)

真实项目结构


一、项目结构(生产推荐)

captcha-service ├── controller │ └── CaptchaController.java ├── service │ ├── SliderCaptchaService.java │ ├── BehaviorCaptchaService.java │ └── RiskDecisionService.java ├── model │ ├── SliderTrack.java │ ├── BehaviorEvent.java │ ├── CaptchaResult.java │ └── CaptchaDecision.java ├── util │ ├── TokenUtil.java │ └── RiskUtil.java ├── config │ └── RedisConfig.java └── CaptchaApplication.java

二、核心数据模型

1️⃣ 决策枚举

public enum CaptchaDecision { PASS, SLIDER, REJECT }

2️⃣ 返回结果

@Data @AllArgsConstructor public class CaptchaResult { private CaptchaDecision decision; private String captchaToken; }

3️⃣ 滑块轨迹

@Data public class SliderTrack { private int x; private int y; private long t; }

4️⃣ 行为事件

@Data public class BehaviorEvent { private String type; // move / click / key private int x; private int y; private long timestamp; }

三、Token 工具(一次性 + 防重放)

public class TokenUtil { private static final String SECRET = "captcha-secret"; public static String generate(String sessionId) { String raw = sessionId + ":" + System.currentTimeMillis() + ":" + UUID.randomUUID(); return DigestUtils.sha256Hex(raw + SECRET); } }

四、滑块验证码 Service(重点)

@Service public class SliderCaptchaService { public boolean verifyPosition(int userX, int targetX) { return Math.abs(userX - targetX) <= 5; } public boolean verifyTrack(List<SliderTrack> tracks) { if (tracks == null || tracks.size() < 10) return false; long duration = tracks.get(tracks.size() - 1).getT() - tracks.get(0).getT(); if (duration < 300) return false; boolean acc = false, dec = false; for (int i = 2; i < tracks.size(); i++) { int dx1 = tracks.get(i - 1).getX() - tracks.get(i - 2).getX(); int d
http://www.jsqmd.com/news/367527/

相关文章:

  • 详细介绍:【ZeroRange WebRTC】TURN 在 WebRTC 中的角色与工作原理(深入指南)
  • 手把手教你用SmolVLA:从零开始部署智能机器人控制系统
  • 对mmc 设备进行分区
  • 2026六盘水探店排行榜:精选10家宝藏服装店必看 - 精选优质企业推荐榜
  • PETRV2-BEV模型5分钟快速部署教程:星图AI平台实战
  • Ollama部署translategemma-27b-it:5分钟搭建多语言翻译模型
  • 官网-生育保险政策
  • 告别繁琐的数据抓取:三步搭建你的专属市场研究智能体
  • 闲鱼自动发货工具实测对比:为什么我最终选择了闲管家
  • 2026六枝逛街避坑指南:高品质真皮女鞋口碑店铺名单公布! - 精选优质企业推荐榜
  • 基于Python的实验室管理系统[python]-计算机毕业设计源码+LW文档
  • 小白也能懂的Pi0具身智能:从理论到实践全解析
  • 基于YOLOv8的交通道路标线检测系统python]-计算机毕业设计源码+LW文档
  • 使用WebRTC创建直播系统源码与音视频语聊房实践指南
  • 1013: 防水堤坝
  • 基于python的人工智能图像风格迁移系统[python]-计算机毕业设计源码+LW文档
  • 基于python的人脸检测识别录像系统[python]-计算机毕业设计源码+LW文档
  • MATLAB 计算全局声发射 b 值 - 区间统计
  • 基于随机函数链接神经网络模型的锂电池健康状态SOH预测附Matlab代码
  • 2026年口碑好的大型滚丝机,螺纹滚丝机厂家采购决策榜单 - 品牌鉴赏师
  • 宇宙有边界吗?
  • 2026年优秀的数控滚轧机厂家采购选型指南 - 品牌鉴赏师
  • 2026年诚信的东城区就医陪诊公司优质供应商推荐榜 - 品牌鉴赏师
  • 如何保护您的 ERP 业务数据?
  • 官网 - 学工管理系统|学工系统|学生管理信息系统|学生工作管理信息系统|学生工作管理系统
  • 通义千问3-VL-Reranker-8B问题解决:常见部署错误排查指南
  • 科学家构建量子计算机的三种方法
  • DNS报文格式详解
  • 大数据毕业设计之基于Python的旅游大数据分析可视化系统设计
  • 广州学工管理系统-学工管理系统-智慧校园解决方案 - 学工系统|学工平台|学生管理系统|学生信息管理系统|学工管理平台|智慧学工|智慧学工系统