后端使用Spring Boot框架 + 前端VUE 实现滑动模块验证码

embedded/2024/12/28 15:02:18/

在现在常用的登录验证码方式有很多种,但是都不可避免被攻击,但是有很多方式可以防止被攻击,从而进行维护。

现在我就讲解一下滑动块验证码的实现方式:

这个是前端代码,我使用的是vue,在使用的时候注意:

注意几个关键点:

  1. 使用Vue的data函数来存储组件的状态,如isDraggingsliderPosition等。
  2. 使用Vue的mounted生命周期钩子来获取容器和滑块的宽度。
  3. 使用Vue的ref属性来方便地访问DOM元素。
  4. 在模板中使用:style绑定来动态设置滑块的left样式。
  5. 监听mousedownmousemovemouseup(以及mouseleave以防鼠标移出窗口时未释放)事件来处理拖动逻辑。
  6. 使用async/await来处理异步的API请求。

后端我使用的java代码实现,

前端Vue组件的修改
确保前端Vue组件中的fetch请求URL与后端控制器中的/verify-captcha相匹配。

  1. 注意事项

    • 安全性:在实际应用中,预期的滑块位置(expectedPosition)应该是动态生成的,并且只能被一次验证使用(例如,存储在数据库中并与用户会话相关联)。
    • 验证逻辑:上面的示例使用了简单的数值比较。在实际应用中,你可能需要实现更复杂的验证逻辑,比如考虑用户拖动滑块的速度、加速度等。
    • 错误处理:在后端控制器中添加适当的错误处理逻辑,以便在验证失败或发生其他错误时向前端返回有用的错误信息。
    • CORS(跨源资源共享):如果你的前端和后端部署在不同的域上,你需要在后端添加CORS支持,以便前端能够成功向后端发送请求。

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CaptchaController {

// 假设的验证码验证逻辑(实际中可能需要更复杂的逻辑)
private int expectedPosition = 100; // 假设预期的滑块位置是100

@PostMapping(“/verify-captcha”)
public ResponseEntity verifyCaptcha(@RequestBody CaptchaRequest request) {
// 验证滑块位置
boolean isValid = request.getSliderPosition() == expectedPosition;

// 这里只是简单示例,实际中可能需要从数据库或缓存中获取expectedPosition

CaptchaResponse response = new CaptchaResponse();
response.setSuccess(isValid);

return ResponseEntity.ok(response);
}

// 简单的请求和响应DTO
static class CaptchaRequest {
private int sliderPosition;

// Getters and Setters
public int getSliderPosition() {
return sliderPosition;
}

public void setSliderPosition(int sliderPosition) {
this.sliderPosition = sliderPosition;
}
}

static class CaptchaResponse {
private boolean success;

// Getters and Setters
public boolean isSuccess() {
return success;
}

public void setSuccess(boolean success) {
this.success = success;
}
}
}


http://www.ppmy.cn/embedded/149468.html

相关文章

HarmonyOS Next 应用元服务开发-应用接续动态配置迁移按需迁移页面

按需迁移页面栈,支持应用动态选择是否进行页面栈恢复(默认进行页面栈信息恢复)。如果应用不想使用系统默认恢复的页面栈,则可以设置不进行页面栈迁移,而需要在onWindowStageRestore设置迁移后进入的页面,参…

static 和const的作用面试常问

点击上方"蓝字"关注我们 01、static 关键字 >>> 1. 局部变量 作用:将变量的生命周期延续到程序的整个运行期间,而不仅仅是它所在的函数调用期间。 void func() {static int count = 0; // 只会初始化一次 count++; printf("%d\n", count)…

【论文复现】基于Aquila探索方法的灰狼优化算法

目录 1.摘要2.灰狼算法GWO原理3.改进策略4.结果展示5.参考文献6.代码获取 1.摘要 灰狼优化算法(GWO)是一种有效的元启发式算法,但由于其搜索个体的位置更新依赖于 alpha 狼,这可能导致算法容易陷入局部最优解。为了解决这一问题&…

无人机森林草原播种施肥植物恢复技术详解

无人机森林草原播种施肥植物恢复技术是一种创新的生态恢复手段,它结合了先进的无人机技术与农业、林业实践,为森林草原的生态修复提供了高效、精准的解决方案。以下是对该技术的详细解析: 一、无人机森林草原播种技术 1. 技术原理&#xff1…

简单讲解关于微信小程序调整 miniprogram 后, tabbar 找不到图片的原因之一

微信小程序开发,[ miniprogram/app.json 文件内容错误],["tabBar"]["list"][0]["iconPath"]: "/miniprogram/assets/tabbar/icon_main_home.png" 未找到 简单讲解关于调整 miniprogram 后, tabbar 找…

Mac的M2芯片运行lightgbm报错,其他python包可用,x86_x64架构运行

问题 OSError: dlopen(/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/lightgbm/lib_lightgbm.so, 0x0006): Library not loaded: /usr/local/opt/libomp/lib/libomp.dylibReferenced from: <ABE11853-3862-3862-A992-E89D6F4B220D> /…

【ETCD】【实操篇(十二)】分布式系统中的“王者之争”:基于ETCD的Leader选举实战

分布式系统中&#xff0c;Leader选举是一个非常重要的概念。Leader选举确保系统中的某个节点&#xff08;Leader&#xff09;负责执行关键任务&#xff0c;而其他节点作为备份&#xff0c;等待Leader的失效或者任务完成后重新选举出新的Leader。通过Leader选举机制&#xff0c;…

决策树入门指南:从原理到实践

目录 1 决策树的基本原理与理论基础 1.1 基本原理与定义 1.2 决策边界特性 2 特征选择与划分准则 2.1 信息增益与信息增益比 2.2 Gini指数 3 树的生成与剪枝优化 3.1 剪枝的理论基础 3.2 预剪枝策略 3.2.1基本原理 3.2.2 常用的停止准则 3.3 后剪枝策略 3.3.1 代表…