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

免费素材图片下载seo实战教程

免费素材图片下载,seo实战教程,人才网站开发文档,做网站宽度简介 AJ-Captcha行为验证码,包含滑动拼图、文字点选两种方式,UI支持弹出和嵌入两种方式。后端提供Java、Golang实现,前端提供了php、angular、html、vue、uni-app、flutter、android、ios等代码示例。点击前往AJ-Captcha代码仓库 引入Maven…

简介

AJ-Captcha行为验证码,包含滑动拼图、文字点选两种方式,UI支持弹出和嵌入两种方式。后端提供Java、Golang实现,前端提供了php、angular、html、vue、uni-app、flutter、android、ios等代码示例。点击前往AJ-Captcha代码仓库

引入Maven依赖

		<dependency><groupId>com.anji-plus</groupId><artifactId>captcha-spring-boot-starter</artifactId><version>1.4.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

修改application.properties

# 滑动验证,底图路径,不配置将使用默认图片
# 支持全路径
# 支持项目路径,以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=redis
# local缓存的阈值,达到这个值,清除缓存
#aj.captcha.cache-number=1000
# local定时清除过期缓存(单位秒),设置为0代表不执行
#aj.captcha.timing-clear=180
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456
spring.redis.database=1
spring.redis.timeout=6000# 验证码类型default两种都实例化。
aj.captcha.type=default
# 汉字统一使用Unicode,保证程序通过@value读取到是中文,可通过这个在线转换
# https://tool.chinaz.com/tools/unicode.aspx 中文转Unicode
# 右下角水印文字(我的水印)
aj.captcha.water-mark=我的水印
# 右下角水印字体(不配置时,默认使用文泉驿正黑)
# 由于宋体等涉及到版权,我们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=4aj.captcha.history-data-clear-enable=false# 接口请求次数一分钟限制是否开启 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=30
# verify接口一分钟内请求数限制(暂用不上,可后台直接调用captchaService)
#aj.captcha.req-verify-minute-limit=30aj.captcha.i18n.enabled=true
aj.captcha.i18n.prefx=aj.captcha.
spring.messages.basename=messages/messages,captcha/messages

注意: 这里用到了redis,配置文件中应按实际环境配置redis参数

配置SPI

redis ----->  SPI: 在resources目录新建META-INF.services文件夹(两层)

在这里插入图片描述

  • com.anji.captcha.service.CaptchaCacheService
com.example.homeLearn.service.CaptchaCacheServiceRedisImpl

注意: 上面代码块中需要调整为自己项目的包名

依次将下面类复制到项目中

  • CaptchaConfig.java
package com.example.homeLearn.config;import com.anji.captcha.properties.AjCaptchaProperties;
import com.anji.captcha.service.CaptchaCacheService;
import com.anji.captcha.service.impl.CaptchaServiceFactory;
import com.example.homeLearn.service.CaptchaCacheServiceRedisImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.core.StringRedisTemplate;@Configuration
public class CaptchaConfig {@AutowiredStringRedisTemplate redisTemplate;@Bean(name = "AjCaptchaCacheService")@Primarypublic CaptchaCacheService captchaCacheService(AjCaptchaProperties config){//缓存类型redis/local/....CaptchaCacheService ret = CaptchaServiceFactory.getCache(config.getCacheType().name());if(ret instanceof CaptchaCacheServiceRedisImpl){((CaptchaCacheServiceRedisImpl)ret).setStringRedisTemplate(redisTemplate);}return ret;}
}
  • CaptchaCacheServiceRedisImpl.java
package com.example.homeLearn.service;import com.anji.captcha.service.CaptchaCacheService;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.data.redis.core.script.RedisScript;import java.util.Collections;
import java.util.concurrent.TimeUnit;/*** 对于分布式部署的应用,我们建议应用自己实现CaptchaCacheService,比如用Redis,参考service/spring-boot代码示例。* 如果应用是单点的,也没有使用redis,那默认使用内存。* 内存缓存只适合单节点部署的应用,否则验证码生产与验证在节点之间信息不同步,导致失败。** ☆☆☆ SPI: 在resources目录新建META-INF.services文件夹(两层),参考当前服务resources。* @Title: 使用redis缓存* @author Devli* @date 2020-05-12*/
public class CaptchaCacheServiceRedisImpl implements CaptchaCacheService {@Overridepublic String type() {return "redis";}private static final String LUA_SCRIPT = "local key = KEYS[1] " +"local incrementValue = tonumber(ARGV[1]) " +"if redis.call('EXISTS', key) == 1 then " +"    return redis.call('INCRBY', key, incrementValue) " +"else " +"    return incrementValue " +"end";public void setStringRedisTemplate(StringRedisTemplate stringRedisTemplate) {this.stringRedisTemplate = stringRedisTemplate;}private StringRedisTemplate stringRedisTemplate;@Overridepublic void set(String key, String value, long expiresInSeconds) {stringRedisTemplate.opsForValue().set(key, value, expiresInSeconds, TimeUnit.SECONDS);}@Overridepublic boolean exists(String key) {return stringRedisTemplate.hasKey(key);}@Overridepublic void delete(String key) {stringRedisTemplate.delete(key);}@Overridepublic String get(String key) {return stringRedisTemplate.opsForValue().get(key);}@Overridepublic Long increment(String key, long val) {// 执行 Lua 脚本RedisScript<Long> script = new DefaultRedisScript<>(LUA_SCRIPT, Long.class);// 执行 Lua 脚本return stringRedisTemplate.execute(script,Collections.singletonList(key),String.valueOf(val));}@Overridepublic void setExpire(String key, long l) {stringRedisTemplate.expire(key, l, TimeUnit.SECONDS);}
}
  • CaptchaController .java
package com.example.homeLearn.controller;import com.anji.captcha.model.common.RepCodeEnum;
import com.anji.captcha.model.common.ResponseModel;
import com.anji.captcha.model.vo.CaptchaVO;
import com.anji.captcha.service.CaptchaService;
import com.anji.captcha.util.StringUtils;
import com.example.homeLearn.common.returns.CommonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;@RestController
@RequestMapping("/captcha")
@CrossOrigin(origins = "*")
public class CaptchaController {@Autowiredprivate CaptchaService captchaService;@PostMapping("/get")public ResponseModel get(@RequestBody CaptchaVO data, HttpServletRequest request) {assert request.getRemoteHost()!=null;data.setBrowserInfo(getRemoteId(request));return captchaService.get(data);}@PostMapping("/check")public ResponseModel check(@RequestBody CaptchaVO data, HttpServletRequest request) {data.setBrowserInfo(getRemoteId(request));return captchaService.check(data);}/**** 服务端验证接口,独立部署的场景使用,集成部署的场景:服务内部调用,不需要调用此接口可注释掉* @param data* @param request* @return*//*@PostMapping("/verify")public ResponseModel verify(@RequestBody CaptchaVO data, HttpServletRequest request) {return captchaService.verification(data);}*/public static final String getRemoteId(HttpServletRequest request) {String xfwd = request.getHeader("X-Forwarded-For");String ip = getRemoteIpFromXfwd(xfwd);String ua = request.getHeader("user-agent");if (StringUtils.isNotBlank(ip)) {return ip + ua;}return request.getRemoteAddr() + ua;}private static String getRemoteIpFromXfwd(String xfwd) {if (StringUtils.isNotBlank(xfwd)) {String[] ipList = xfwd.split(",");return StringUtils.trim(ipList[0]);}return null;}
}

前端部分修改

下载源码,修改 dev.env.js, 将BASE_API修改为自己的后端服务
在这里插入图片描述
在这里插入图片描述

参考

AJ-Captcha源代码中的示例

http://www.dtcms.com/wzjs/166293.html

相关文章:

  • 域名购买哪个网站长春网站优化
  • 怎么用iapp做网站软件乔拓云智能建站平台
  • 买布做衣裳 在哪个网站买好青岛网站建设哪家好
  • 做电子元器件销售什么网站好国内最新新闻大事
  • 设计网站设计公司seo网站优化推广教程
  • 个人简历表格模板安全优化大师
  • 广西疫情最新通知四川二级站seo整站优化排名
  • 企业网站 设计需求营销方案怎么写?
  • 信阳专业网站建设深圳网站开发制作
  • 比较好的网站开发项目营销咨询服务
  • 广西做网站的公司青岛网站建设公司哪家好
  • 在线网站开发网站开发一般多少钱
  • 山东网站建设公司哪家权威五个常用的搜索引擎
  • 邳州哪家做百度推广网站百度搜索广告怎么收费
  • 网站开发运营公司绩效提成方案网页是怎么制作的
  • 站长之家端口扫描网站设计公司模板
  • 公众号制作流程西安seo关键字优化
  • 政府网站建设 需求2023年新闻热点事件摘抄
  • 临夏政府城乡建设网站做关键词优化
  • 做摄影网站的目的是什么海南百度推广总代理
  • 网站做好了 怎么做解析收录查询工具
  • 犀牛云做网站怎么样百度网站关键词排名查询
  • 医院网站和公众号建设方案新型网络营销方式
  • 棋盘游戏类网站开发汕头网站建设推广
  • 如何自己做网站优化媒体发稿推广
  • 抖音代运营公司怎么找客户关键词排名优化怎么样
  • 深圳市公安局佛山优化网站关键词
  • wordpress的弊端优化分析
  • 用hbuilder静态网站怎么做上海推广网络营销咨询热线
  • 西宁市建设局官方网站淘宝代运营公司十大排名