【插件集成】 AJ-Captcha 使用

官网:https://ajcaptcha.beliefteam.cn/captcha-doc/
  行为验证码采用嵌入式集成方式,接入方便,安全,高效。抛弃了传统字符型验证码展示-填写字符-比对答案的流程,采用验证码展示-采集用户行为-分析用户行为流程,用户只需要产生指定的行为轨迹,不需要键盘手动输入,极大优化了传统验证码用户体验不佳的问题;同时,快速、准确的返回人机判定结果。目前对外提供两种类型的验证码,其中包含滑动拼图、文字点选。
   后端基于Java实现,提供纯Java.jar和SpringBoot Starter。前端提供了Android、iOS、Futter、Uni-App、ReactNative、Vue、Angular、Html、Php等多端示例。
使用:

1 后端

1引入依赖

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

2 配置

简单配置

# 滑块验证码
aj:
captcha:
 # blockPuzzle滑块 clickWord文字点选  default默认两者都实例化
 type: blockPuzzle
 # 右下角显示字
 water-mark: liusu
 # 校验滑动拼图允许误差偏移量(默认5像素)
 slip-offset: 5
 # aes加密坐标开启或者禁用(true|false)
 aes-status: true
 # 滑动干扰项(0/1/2)
 interference-options: 2

复杂配置:

# 滑动验证,底图路径,不配置将使用默认图片
# 支持全路径
# 支持项目路径,以classpath:开头,取resource目录下路径,例:classpath:images/jigsaw
aj.captcha.jigsaw=classpath:images/jigsaw
#滑动验证,底图路径,不配置将使用默认图片
##支持全路径
# 支持项目路径,以classpath:开头,取resource目录下路径,例:classpath:images/pic-click
aj.captcha.pic-click=classpath:images/pic-click

# 对于分布式部署的应用,我们建议应用自己实现CaptchaCacheService,比如用Redis或者memcache,
# 参考CaptchaCacheServiceRedisImpl.java
# 如果应用是单点的,也没有使用redis,那默认使用内存。
# 内存缓存只适合单节点部署的应用,否则验证码生产与验证在节点之间信息不同步,导致失败。
# !!! 注意啦,如果应用有使用spring-boot-starter-data-redis,
# 请打开CaptchaCacheServiceRedisImpl.java注释。
# redis ----->  SPI: 在resources目录新建META-INF.services文件夹(两层),参考当前服务resources。
# 缓存local/redis...
aj.captcha.cache-type=local
# local缓存的阈值,达到这个值,清除缓存
#aj.captcha.cache-number=1000
# local定时清除过期缓存(单位秒),设置为0代表不执行
#aj.captcha.timing-clear=180
#spring.redis.host=10.108.11.46
#spring.redis.port=6379
#spring.redis.password=
#spring.redis.database=2
#spring.redis.timeout=6000

# 验证码类型default两种都实例化。
aj.captcha.type=default
# 汉字统一使用Unicode,保证程序通过@value读取到是中文,可通过这个在线转换;yml格式不需要转换
# https://tool.chinaz.com/tools/unicode.aspx 中文转Unicode
# 右下角水印文字(我的水印)
aj.captcha.water-mark=\u6211\u7684\u6c34\u5370
# 右下角水印字体(不配置时,默认使用文泉驿正黑)
# 由于宋体等涉及到版权,我们jar中内置了开源字体【文泉驿正黑】
# 方式一:直接配置OS层的现有的字体名称,比如:宋体
# 方式二:自定义特定字体,请将字体放到工程resources下fonts文件夹,支持ttf\ttc\otf字体
# aj.captcha.water-font=WenQuanZhengHei.ttf
# 点选文字验证码的文字字体(文泉驿正黑)
# aj.captcha.font-type=WenQuanZhengHei.ttf
# 校验滑动拼图允许误差偏移量(默认5像素)
aj.captcha.slip-offset=5
# aes加密坐标开启或者禁用(true|false)
aj.captcha.aes-status=true
# 滑动干扰项(0/1/2)
aj.captcha.interference-options=2

#点选字体样式 默认Font.BOLD
aj.captcha.font-style=1
#点选字体字体大小
aj.captcha.font-size=25
#点选文字个数,存在问题,暂不支持修改
#aj.captcha.click-word-count=4

aj.captcha.history-data-clear-enable=false

# 接口请求次数一分钟限制是否开启 true|false
aj.captcha.req-frequency-limit-enable=false
# 验证失败5次,get接口锁定
aj.captcha.req-get-lock-limit=5
# 验证失败后,锁定时间间隔,s
aj.captcha.req-get-lock-seconds=360
# get接口一分钟内请求数限制
aj.captcha.req-get-minute-limit=30
# check接口一分钟内请求数限制
aj.captcha.req-check-minute-limit=60
# verify接口一分钟内请求数限制
aj.captcha.req-verify-minute-limit=60

3 使用

获取验证码接口:http://:/captcha/get

请求参数:

{
	"captchaType": "blockPuzzle",  //验证码类型 clickWord
	"clientUid": "唯一标识"  //客户端UI组件id,组件初始化时设置一次,UUID(非必传参数)
}

响应参数:


 "repCode": "0000",
 "repData": {
     "originalImageBase64": "底图base64",
     "point": {    //默认不返回的,校验的就是该坐标信息,允许误差范围
         "x": 205,
         "y": 5
     },
     "jigsawImageBase64": "滑块图base64",
     "token": "71dd26999e314f9abb0c635336976635", //一次校验唯一标识
     "secretKey": "16位随机字符串", //aes秘钥,开关控制,前端根据此值决定是否加密
     "result": false,
     "opAdmin": false
 },
 "success": true,
 "error": false
}

核对验证码接口接口:http://:/captcha/check

请求参数:

{
	 "captchaType": "blockPuzzle",
	 "pointJson": "QxIVdlJoWUi04iM+65hTow==",  //aes加密坐标信息
	 "token": "71dd26999e314f9abb0c635336976635"  //get请求返回的token
}

响应参数

{
 "repCode": "0000",
 "repData": {
     "captchaType": "blockPuzzle",
     "token": "71dd26999e314f9abb0c635336976635",
     "result": true,
     "opAdmin": false
 },
 "success": true,
 "error": false
}

2 前端

前端使用的是vue,注意一定要保证和后端java版本一致。

1 复制view/vue/src/components/verifition文件夹,到自己工程对应目录下,在登录页面插入如下代码

2 安装请求和加密依赖

npm install axios crypto-js -S

//request.js
import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'

// create an axios instance
const service = axios.create({
baseURL:"/web", // url = base url + request url
// withCredentials: true, // send cookies when cross-domain requests
timeout: 5000 // request timeout
})

// request interceptor
service.interceptors.request.use(
config => {
 // do something before request is sent
 config.headers['Content-Type']='application/json;'
 if (store.getters.token) {
   // let each request carry token
   // ['X-Token'] is a custom headers key
   // please modify it according to the actual situation
   config.headers['X-Token'] = getToken()
 }
 return config
},
error => {
 // do something with request error
 console.log(error) // for debug
 return Promise.reject(error)
}
)
// response interceptor
service.interceptors.response.use(
response => {
 const res = response.data
 return res
},
)
export default service

3 使用


<template>
<div>
<Verify
 @success="success"
 mode="pop"
 captchaType="blockPuzzle"
 :imgSize="{ width: '330px', height: '155px' }"
 ref="verify"
  ></Verify>
//mode="pop"模式
<button @click="useVerify">调用验证组件</button>
</div>
</template>

<script>
import Verify from '@/components/verifition/Verify'
import requestWeb from '@/utils/requestWeb'
export default {
name: 'index',
components:{
 Verify
},
methods:{
 async webget(){
   let data={"captchaType":"blockPuzzle","clientUid":"slider-bcd6b53b-5516-478b-8854-1909e00d686f","ts":1668070762462}
   let req=await  requestWeb({
     url: '/captcha/get',
     method: 'post',
     data
     }
   )
   console.log('req'+req)
 },
   success(params){
     // params 返回的二次验证参数, 和登录参数一起回传给登录接口,方便后台进行二次验证
   },
   useVerify(){
     this.$refs.verify.show()
   }

}
}
</script>

<style scoped>

</style>

3 排除错误

1 Resolved [org.springframework.http.converter.HttpMessageNotReadableException: I/O error while reading input message; nested exception is org.apache.catalina.connector.ClientAbortException: java.io.EOFException: Unexpected EOF read on the socket]

错误原因:axios请求get/check为post请求且config.headers[‘Content-Type’]=‘application/json;’

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
行为验证码(滑动拼图、点选文字),前后端(java)交互,包含 h5/flutter/uni-app 的源码和实现。 行为验证码采用嵌入式集成方式,接入方便,安全,高效。抛弃了传统字符型验证码展示-填写字符-比对答案的流程,采用验证码展示-采集用户行为-分析用户行为流程,用户只需要产生指定的行为轨迹,不需要键盘手动输入,极大优化了传统验证码用户体验不佳的问题;同时,快速、准确的返回人机判定结果。目前对外提供两种类型的验证码,其中包含滑动拼图、文字点选。若希望不影响原UI布局,可采用弹出式交互。 目录结构: ├─core │ ├─captcha java核心源码 │ └─captcha-spring-boot-starter springboot快速启动 ├─images  效果图 ├─service │ ├─springboot  后端为springboot项目示例 │ └─springmvc  后端为springmvc非springboot项目示例 └─view  多语言客户端示例  ├─android   原生android实现示例  ├─flutter flutter实现示例  ├─html  原生html实现示例  ├─ios  原生ios实现示例  ├─uni-app  uni-app实现示例  └─vue vue实现示例   AJ-Captcha 更新日志: v1.2.7 1.添加接口请求限制 # 接口请求次数一分钟限制是否开启 true|false aj.captcha.req-frequency-limit-enable=true # 验证失败5次,get接口锁定 aj.captcha.req-get-lock-limit=5 # 验证失败后,锁定时间间隔,s aj.captcha.req-get-lock-seconds=360 # get接口一分钟内请求数限制 aj.captcha.req-get-minute-limit=30 # check接口一分钟内请求数限制 aj.captcha.req-check-minute-limit=60 # verify接口一分钟内请求数限制 aj.captcha.req-verify-minute-limit=60 2.更新jar groupId com.anji-plus 3.移除wiki文档,采用vuepress在线文档
Happy Captcha简易验证码是一款易于使用Java验证码软件包,旨在花最短的时间,最少的代码量,实现Web站点的验证码功能。 Happy Captcha简易验证码提供了图片和动画两种展现形式,验证码内容包括中文(收录3500个常用汉字),阿拉伯数字(09),中文数字(零至九),中文大写数字(零至玖),数字与字母混合(09-az-AZ),数字与小写字母混合(09-az),数字与大写字母混合(09-AZ),纯小写字母,纯大写字母,大小写字母混合以及运算表达式(阿拉伯数字运算表达式和中文运算表达式)等12种类型。 Happy Captcha简易验证码完全遵循Apache 2.0开源许可协议,你可以自由使用该软件,如您在使用Happy Captcha时发现软件的任何缺陷,欢迎随时与作者联系。 Happy Captcha简易验证码安装: 如果你的项目使用的是Maven进行依赖管理,你只需向pom.xml文件添加下面的配置即可:     com.ramostear   Happy-Captcha   1.0.1   Gradle用户则可以通过引入如下的配置获取Happy Captcha: implementation 'com.ramostear:Happy-Captcha:1.0.1' Happy Captcha简易验证码使用: HappyCaptcha在设计时力求过程的简洁,在默认情况下,你只需要书写一行代码即可生成漂亮的验证码图片。下面是HappyCaptcha使用示例: @Controller public class HappyCaptchaController{     @GetMapping("/captcha")     public void happyCaptcha(HttpServletRequest request,HttpServletResponse response){         HappyCaptcha.require(request,response).build().finish();     } } 对于HappyCaptcha而言,只有request和response是必须提供的参数,其余参数都可以使用缺省值。 在默认情况下,HappyCaptcha生成的验证码以图片形式展现,内容为09-az-A~Z的字符随机组合,字符长度为5,图片宽度为160,高度为50,字体为微软雅黑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值