滑块验证 - 使用AJ-Captcha插件【超简单.jpg】

news2025/2/27 11:16:11

滑块验证实现

  • 一、后端
    • 1)首先引入maven:
    • 2)再在application.yml中自定义水印,直接启动后前端就可以请求接口了
    • 3)重写CaptchaCacheServiceRedisImpl
        • ①先新建一个文件夹
        • ②重写impl
  • 二、前端:
    • 1)复制文件
    • 2)安装请求和加密依赖
    • 3)之后就可以直接使用了(引入、使用组件)
          • vue使用:
          • js引入:
  • 三、后端二次校验接口
  • 最后效果展示

GitHub地址:https://github.com/anji-plus/captcha/blob/master/README_CN.md
AJ-Captcha文档:https://ajcaptcha.beliefteam.cn/captcha-doc/

本人是spring boot – vue 项目:

一、后端

1)首先引入maven:

<dependency>
   <groupId>com.anji-plus</groupId>
   <artifactId>spring-boot-starter-captcha</artifactId>
   <version>1.3.0</version>
</dependency>

在这里插入图片描述

2)再在application.yml中自定义水印,直接启动后前端就可以请求接口了

我这边就写了最简单的,具体可以看文档

# 验证码相关
aj:
  captcha:
    #jigsaw: classpath:images/jigsaw
    cache-type: redis
    water-mark: 水印-哒不溜

3)重写CaptchaCacheServiceRedisImpl

因为这个插件原本自带的impl好像有点问题,你们也可以不重写先试试;

①先新建一个文件夹

FileName:com.anji.captcha.service.CaptchaCacheService
内容:写自己的路径
在这里插入图片描述

②重写impl

我直接把内容复制出来吧,新建CaptchaCacheServiceRedisImpl

import com.anji.captcha.service.CaptchaCacheService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Service
@Slf4j
public class CaptchaCacheServiceRedisImpl implements CaptchaCacheService {

    private static final String REDIS = "redis";

    @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 String type() {
        return REDIS;
    }
}

二、前端:

1)复制文件

复制整个verifition文件夹,到自己工程对应目录下
进链接复制文件夹:https://github.com/anji-plus/captcha/tree/master/view/vue/src/components

2)安装请求和加密依赖

 npm install axios  crypto-js   -S

3)之后就可以直接使用了(引入、使用组件)

vue使用:
   	<!-- 自己可以做其它的调整大小什么的 -->
    <Verify
        @success="verifySuccess"
        @cancel="loading = false"
        :mode="'pop'"
        :captchaType="'blockPuzzle'"
        :imgSize="{ width: '330px', height: '155px' }"
        ref="verify"
      />
        <el-button type="primary"
                   @click="dialogtelSubmit()">滑动验证</el-button>
js引入:
import Verify from '@/components/verifition/Verify'

export default {
  components: {
    Verify
  },
  data() {...},
  methods: {
	// 打开滑动验证码
  	dialogtelSubmit() {
      this.$refs.verify.show();
  	},
    // 滑动验证成功后执行的方法
    verifySuccess(params) {
    	// params:滑块验证返回的信息,传参params.captchaVerification
    	// 如果直接把params传过去接收不到(我自己是这样,不知道你们)
    	this.$http({
            url: this.$http.adornUrl('/sendCode/captcha'),
            method: 'post',
            params: this.$http.adornParams({
              captchaVerification: params.captchaVerification,
            })
          }).then(({data}) => {
          	if(data) { 
            	this.$message.success('验证成功!')
          	}
          }).catch(() => {
          })
    },
  }
}

三、后端二次校验接口

	@PostMapping("/sendCode/captcha")
	public ResponseEntity<Boolean> sendLoginCodeCaptcha(String captchaVerification) {
		boolean flag = false;
		// 新创建个对象,再赋值 进行解析
		CaptchaVO captchaVO = new CaptchaVO();
		captchaVO.setCaptchaVerification(captchaVerification);
		ResponseModel response = captchaService.verification(captchaVO);
		
		if(response.isSuccess() == false) {
			//验证码校验失败,返回信息告诉前端
	        //repCode  0000  无异常,代表成功
	        //repCode  9999  服务器内部异常
	        //repCode  0011  参数不能为空
	        //repCode  6110  验证码已失效,请重新获取
	        //repCode  6111  验证失败
	        //repCode  6112  获取验证码失败,请联系管理员
	        //repCode  6113  底图未初始化成功,请检查路径
	        //repCode  6201  get接口请求次数超限,请稍后再试!
	        //repCode  6206  无效请求,请重新获取验证码
	        //repCode  6202  接口验证失败数过多,请稍后再试
	        //repCode  6204  check接口请求次数超限,请稍后再试!
	        /** 抛出异常 (这是自己的方法↓↓↓) 或者你做其它操作 **/
			throw new YamiShopBindException(response.getRepMsg());
		}else if("0000".equals(response.getRepCode())) {// repCode  0000  无异常,代表成功
			flag = response.isSuccess();
		}
		return ResponseEntity.ok(flag);
	}

最后效果展示

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/118244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UML2面向对象分析与设计(第2版) 谭火彬 杂记

首先&#xff0c;来讲讲我对泛化的理解&#xff0c;其实这是站在的视角的不同而表述的不同&#xff0c;泛化是站在父类的角度&#xff0c;父类给孩子的方式叫泛化&#xff0c;而继承是站在孩子的角度&#xff0c;儿子继承父类的方式叫继承。 其实上了谭老师大概一章的课程&…

使用WebPageTest、Lighthouse和Chrome DevTools评估网站性能

目录 一&#xff1a;使用WebPageTest评估网站性能 二&#xff1a;使用Lighthouse分析性能 1、本地npm安装Lighthouse 2、Chrome DevTools中使用 三&#xff1a;使用Chrome DevTools分析性能 一&#xff1a;使用WebPageTest评估网站性能 进入网站首页WebPageTest - Websit…

Linux下常用基本指令大全

在XShell下的复制粘贴 复制: ctrl insert (有些insert 需要配合fn 来按) 粘贴: shift insert ctrl c / ctrl v 是不行的.1. ls指令 语法&#xff1a;ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0…

从App Lab就一鸣惊人的Gorilla Tag,创始人竟是个电竞选手

前不久&#xff0c;热门VR游戏《Gorilla Tag》登陆Quest正式商店&#xff0c;此前该作已经进入App Lab和SteamVR平台&#xff0c;一度成为App Lab最受欢迎的游戏&#xff0c;至此终于修成正果。截至目前&#xff0c;该作在全平台的下载量高达500万次&#xff0c;在Quest商店累计…

七、Java 14 新特性

七、Java 14 新特性 Java 14 已如期于 2020 年 3 月 17 日正式发布&#xff0c;此次更新是继半年前 Java 13 这大版本发布之后的又一次常规版本更新&#xff0c;即便在全球疫情如此严峻形势下&#xff0c;依然保持每六个月的版本更新频率&#xff0c;为大家及时带来改进和增强&…

覆盖和覆盖D2D通信网络的传输容量分析(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 移动数据流量的日益增长与有限的频谱资源之间的矛盾催生了用以提升频谱空间利用率的设备到设备&#xff08;Device-to-Device,…

Typora配置github图床踩坑记录:“success“:false,“message“:“upload error

今天在给typora配置图床的时候遇到了一丢丢问题 我是根据这位大佬的配置步骤使用GithubpicGo搭建图床&#xff0c;保姆级教程来了一步步来的&#xff0c;在处理typora验证图片上传选项时遇到问题&#xff1a; {“success”:false,“message”:“upload error. see C:\Users\AS…

【JavaScript】时间对象

基础知识&#xff1a; 获取年月日&#xff0c;时间&#xff1a; var datenew Date();console.log(date);Thu Nov 17 2022 10:15:07 GMT0800 (中国标准时间) 实际上是对象&#xff0c;但是自动转为字符串显示了。 // 传递参数进去 var date1new Date("2022/11/25 14:38…

录屏软件哪个好?五款免费视频录屏软件

现如今在日常生活中都可以使用得上录屏软件&#xff0c;比如线上会议直播、线上教程课程、网课直播、玩游戏精彩瞬间等等&#xff1b;在互联网众多推荐下&#xff0c;到底录屏软件哪个好&#xff1f;今天小编在这里给大家分享五款免费视频录屏软件&#xff0c;有需要的朋友可以…

个人的一些小创作(随便玩玩,由于技术限制,无使用价值)

tips 1. 桶排序算法的话&#xff0c;必须会去重&#xff0c;因为它的核心就是把数值与数组的下标对应起来&#xff0c;那如果你有多个相同的数值&#xff0c;那也只能对应同一个数组的下标。然后桶排序算法最后打印的是数组的下标&#xff0c;而不是数组下标对应元素的值。 2…

wps合并多个pdf,四个步骤轻松解决

wps这个软件相信大家都或多或少使用过。很多人日常触及到wps的功能&#xff0c;一般是word、Excel或者PPT这三种。其实wps也可以用来读取、编辑PDF文档。wps编辑PDF文档需要一定的技巧&#xff0c;比如使用wps合并多个pdf的方法&#xff0c;很多网友都在问。这里给大家做一个详…

10、SpringCloud 系列:Nacos - 注册中心

SpringCloud 系列列表&#xff1a; 文章名文章地址01、Eureka - 集群、服务发现https://blog.csdn.net/qq_46023503/article/details/12831902302、Ribbon - 负载均衡https://blog.csdn.net/qq_46023503/article/details/12833228803、OpenFeign - 远程调用https://blog.csdn.…

41. 使用块的网络(VGG)代码实现

1. VGG块 在下面的代码中&#xff0c;我们定义了一个名为vgg_block的函数来实现一个VGG块。 该函数有三个参数&#xff0c;分别对应于卷积层的数量num_convs、输入通道的数量in_channels 和输出通道的数量out_channels. import torch from torch import nn from d2l import …

【玩转c++】c++ :string类讲解(万字详解)

目录 &#x1f341;1. 为什么要学习string类 &#x1f341;2. 标准库中的string类 &#x1f341;3. string类各种接口 默认成员函数 Iterators迭代器 capacity容量 Element access:元素访问 Modifiers:修改 字符串操作 成员变量 非成员函数 &#x1f341;4. 扩展阅读 本期主题…

stm32f407VET6 系统学习 day07 通用定时器, OLED 屏幕使用 PWM 的使用

1. 通用定时器的知识 1.STM32共有14个定时器&#xff0c;其中12个16位定时器&#xff0c;2个32 位定时器 2. 通用定时器特点 1. 16/32位向上、向下、向上/向下(中心对齐)计数模式&#xff0c;自动装载计数器&#xff08;TIMXCNT) 。 2. 16位可编程预分频器(TIMx_PSC)&…

-bash: lsof: command not found解决办法

简言 centos系统&#xff0c;检测端口时使用lsof命令发现lsof功能未开启&#xff0c;如下图 [rootiZwz9501p9hnysn92hpx27Z tnt_game]# lsof -bash: lsof: command not found 安装lsof centos系统下可以直接使用yum安装lsof功能&#xff0c;如下图 yum可自动完成安装lsof ls…

gitlab-ci.yml关键字(一)image、variables、include

image 这是一个全局关键字&#xff0c;如果流水线的执行器是使用docker来运行的话&#xff0c;那可以指定docker中的docker镜像。如果执行器是shell的话&#xff0c;那该关键字是无用的&#xff0c;即便机器中已近安装了docker的环境&#xff0c;该关键字可以在全局或者某一个…

NeurIPS2021 | ViTAE+: vision transformer中的归纳偏置探索

参考资料&#xff1a;NeurIPS 2021 | ViTAE: vision transformer中的归纳偏置探索 - 知乎 paper地址&#xff1a;https://openreview.net/pdf?id_RnHyIeu5Y5 论文标题&#xff1a;ViTAE: Vision Transformer Advanced by Exploring Intrinsic Inductive Bias code&#xff…

假设检验之卡方检验

之前我对卡方检验的了解都是一知半解的&#xff0c;即知道作用是对离散变量分布差异的比较&#xff0c;根据期望频数和观察频数的差异计算出来一个卡方值&#xff0c;之后根据自由度和显著性水平查卡方分布对应的临界值&#xff0c;比较大小得出有无明显差异的结论。 一般我们都…

基于FPGA平台实现 ARM Cortex-M0 SOC(一)简介

本系列笔记为基于FPGA平台实现 ARM Cortex-M0 SOC 集创赛作品复盘 Platform&#xff1a; ARM Cortex-M0 Design Srart AT510 XLINX FPGA ARM MDK 5 CM0-Design start 是ARM公司放出的一个免费的ARM 内核学习版本&#xff0c;它比M3还要简单&#xff0c;并且官方把整块代码模糊化…