程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 若依框架
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 若依框架
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 快速入门

  • 后端手册

  • 前端手册

  • 组件文档

  • 数据库分析

  • 集成插件

    • 集成 Docker 实现一键部署
    • 升级 Spring Boot 到 3.x 版本
    • 集成 Ehcache 实现本地缓存切换
    • 集成 WebSocket 实现实时通信
    • 集成 Electron 实现桌面应用程序
    • 集成 Atomikos 实现分布式事务
    • 集成 MinIO 实现分布式文件存储
    • 集成 Easy-ES 实现分布式全文检索
    • 使用 `localStorage` 代替 `cookie`
    • 使用 Undertow 替代 Tomcat 容器
    • 集成 Actuator 实现优雅关闭应用
    • 集成 AJ-Captcha 实现滑块验证码
      • 1. 在 pom.xml 中添加依赖
      • 2. 配置 application.yml
      • 3. 配置匿名访问路径
      • 4. 修改相关类
      • 5. 前端集成滑动验证码
        • 1. 安装 `crypto-js` 依赖包
        • 2. 检查 `package.json` 中的依赖
        • 3. 重新编译项目
        • 4. 检查代码中对 `crypto-js` 的引用
    • 集成 Sharding-JDBC 实现分库分表
    • 集成 JustAuth 实现第三方授权登录
    • 集成 `watermark-dom` 实现页面水印
    • 集成 MyBatis-Plus 实现 MyBatis 增强
    • 集成 EasyExcel 实现 Excel 表格增强
    • 集成 Knife4j 实现 Swagger 文档增强
    • 集成 Redisson 实现 Redis 分布式锁
    • 集成 IP2Region 实现离线 IP 地址定位
    • 42集成 JSEncrypt 实现密码加密传输
    • 集成 HttpClient 实现 HTTP 接口增强
    • 集成 Druid 实现数据库密码加密功能
    • 集成 Browscap 实现用户代理解析
    • 集成 Dynamic-DataSource 实现多数据源增强
  • 若依框架
  • 集成插件
scholar
2024-08-31
目录

集成 AJ-Captcha 实现滑块验证码

# 集成 AJ-Captcha 实现滑块验证码

在前后端分离的系统中,滑块验证码可以有效地防止恶意登录请求,提高系统的安全性。以下是如何在若依项目中集成 AJ-Captcha 实现滑块验证码的详细步骤。

# 1. 在 pom.xml 中添加依赖

首先,需要在 ruoyi-framework/pom.xml 中添加 AJ-Captcha 的依赖。AJ-Captcha 是一个支持滑动拼图和文字点选两种验证码形式的库。

<!-- 滑块验证码  -->
<dependency>
    <groupId>com.github.anji-plus</groupId>
    <artifactId>captcha-spring-boot-starter</artifactId>
    <version>1.2.7</version>
</dependency>

<!-- 如果不需要原有的 kaptcha 验证码,可以删除对应的依赖 -->
1
2
3
4
5
6
7
8

# 2. 配置 application.yml

在 ruoyi-admin 模块的 application.yml 中添加 AJ-Captcha 的相关配置,以启用滑块验证码并设置相关参数。

# 滑块验证码配置
aj:
  captcha:
    cache-type: redis          # 使用 Redis 作为缓存
    type: blockPuzzle          # 验证码类型,可选 blockPuzzle(滑块) 或 clickWord(文字点选)
    water-mark: ruoyi.vip      # 水印文字
    slip-offset: 5             # 滑动偏移量,默认5像素
    aes-status: true           # 启用 AES 加密
    interference-options: 2    # 干扰项级别,0/1/2
1
2
3
4
5
6
7
8
9

此外,需要在 ruoyi-admin/src/main/resources/META-INF/services 目录下创建 com.anji.captcha.service.CaptchaCacheService 文件,文件内容为:

com.ruoyi.framework.web.service.CaptchaRedisService
1

# 3. 配置匿名访问路径

在 SecurityConfig.java 中允许匿名访问滑块验证码的相关接口:

.antMatchers("/login", "/captcha/get", "/captcha/check").permitAll()
1

# 4. 修改相关类

  1. 移除不需要的类:

    • CaptchaController.java
    • CaptchaConfig.java
    • KaptchaTextCreator.java
  2. 修改 SysLoginController.java: 更新 SysLoginController.java 中的登录方法以支持滑块验证码验证。

@PostMapping("/login")
public AjaxResult login(@RequestBody LoginBody loginBody) {
    AjaxResult ajax = AjaxResult.success();
    // 生成令牌
    String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode());
    ajax.put(Constants.TOKEN, token);
    return ajax;
}
1
2
3
4
5
6
7
8
  1. 修改 SysLoginService.java: 在 SysLoginService.java 中添加验证码验证逻辑。
@Component
public class SysLoginService {
    ...

    @Autowired
    @Lazy
    private CaptchaService captchaService;

    public String login(String username, String password, String code) {
        // 验证码校验
        validateCaptcha(username, code);
        ...
    }

    private void validateCaptcha(String username, String code) {
        CaptchaVO captchaVO = new CaptchaVO();
        captchaVO.setCaptchaVerification(code);
        ResponseModel response = captchaService.verification(captchaVO);
        if (!response.isSuccess()) {
            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
            throw new CaptchaException();
        }
    }

    ...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  1. 新增 CaptchaRedisService.java: 创建自定义 Redis 缓存服务用于存储验证码。
package com.ruoyi.framework.web.service;

import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import com.anji.captcha.service.CaptchaCacheService;

public class CaptchaRedisService implements CaptchaCacheService {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Override
    public void set(String key, String value, long expiresInSeconds) {
        stringRedisTemplate.opsForValue().set(key, value, expiresInSeconds, TimeUnit.SECONDS);
    }

    @Override
    public boolean exists(String key) {
        return stringRedisTemplate.hasKey(key);
    }

    @Override
    public void delete(String key) {
        stringRedisTemplate.delete(key);
    }

    @Override
    public String get(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }

    @Override
    public Long increment(String key, long val) {
        return stringRedisTemplate.opsForValue().increment(key, val);
    }

    @Override
    public String type() {
        return "redis";
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

# 5. 前端集成滑动验证码

下载并集成前端滑动验证码插件,使用以下链接下载前端插件并覆盖到项目中:

插件相关包和代码实现: 滑动验证码.zip (opens new window) 提取码: mjs7

在前端页面的登录组件中集成滑动验证码模块,确保验证码验证通过后再提交登录请求。

# 1. 安装 crypto-js 依赖包

  • 你可以通过以下命令安装 crypto-js:
npm install crypto-js --save
1

或者,如果你使用的是 Yarn:

yarn add crypto-js
1

# 2. 检查 package.json 中的依赖

  • 安装完成后,检查你的 package.json 文件,确认 crypto-js 已被添加到项目依赖中:
{
  "dependencies": {
    "crypto-js": "^4.0.0"  // 示例版本号,实际版本可能不同
  }
}
1
2
3
4
5

# 3. 重新编译项目

  • 安装完依赖后,重新编译你的项目:
npm run serve
1

或者:

yarn serve
1

# 4. 检查代码中对 crypto-js 的引用

  • 确保在 ase.js 文件中对 crypto-js 的引用是正确的:
import CryptoJS from 'crypto-js';
1
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
集成 Actuator 实现优雅关闭应用
集成 Sharding-JDBC 实现分库分表

← 集成 Actuator 实现优雅关闭应用 集成 Sharding-JDBC 实现分库分表→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式