1、Kaptcha详细配置
配置项
|
配置说明
|
默认值
|
---|---|---|
kaptcha.border
|
图⽚边框,合法值:yes , no
|
yes
|
kaptcha.border.color
|
边框颜⾊,合法值: r,g,b (and optional
alpha) 或者 white,black,blue
|
black
|
kaptcha.image.width
|
图⽚宽
| 200 |
kaptcha.image.height
|
图⽚⾼
| 50 |
kaptcha.producer.impl
|
图⽚实现类
|
com.google.code.kaptcha.imp
l.DefaultKaptcha
|
kaptcha.textproducer.impl
|
⽂本实现类
|
com.google.code.kaptcha.text
.impl.DefaultTextCreator
|
kaptcha.textproducer.char.s
tring
|
⽂本集合,验证码值从此集合中获取
|
abcde2345678gfynmnpwx
|
kaptcha.textproducer.char.l
ength
|
验证码⻓度
|
5
|
kaptcha.textproducer.font.n
ames
|
字体
|
Arial, Courier
|
kaptcha.textproducer.font.si
ze
|
字体⼤⼩
| 40px. |
kaptcha.textproducer.font.c
olor
|
字体颜⾊,合法值: r,g,b 或者
white,black,blue.
|
black
|
kaptcha.textproducer.char.s
pace
|
⽂字间隔
| 2 |
kaptcha.noise.impl
|
⼲扰实现类
|
com.google.code.kaptcha.imp
l.DefaultNoise
|
kaptcha.noise.color
|
⼲扰 颜⾊,合法值: r,g,b 或者
white,black,blue.
|
black
|
kaptcha.obscurificator.impl
|
图⽚样式:
⽔纹
com.google.code.kaptcha.impl.WaterRip
ple
⻥眼
com.google.code.kaptcha.impl.FishEyeG
impy
阴影
com.google.code.kaptcha.impl.Shadow
Gimpy
|
com.google.code.kaptcha.imp
l.WaterRipple
|
kaptcha.background.impl
|
背景实现类
|
com.google.code.kaptcha.imp
l.DefaultBackground
|
kaptcha.background.clear.fr
om
|
背景颜⾊渐变,开始颜⾊
| light grey |
kaptcha.background.clear.t
o
|
背景颜⾊渐变, 结束颜⾊
| white |
kaptcha.word.impl
|
⽂字渲染器
|
com.google.code.kaptcha.text
.impl.DefaultWordRenderer
|
kaptcha.session.key
|
session key
|
KAPTCHA_SESSION_KEY
|
kaptcha.session.date
|
session date
|
KAPTCHA_SESSION_DATE
|
2、使用举例
3、
(1)生成验证码我们需要引入的依赖
<dependency>
<groupId>com.oopsguy.kaptcha</groupId>
<artifactId>kaptcha-spring-boot-starter</artifactId>
<version>1.0.0-beta-2</version>
</dependency>
(2)生成验证码需要引入的yml代码
kaptcha:
items:
admin:
path: /admin/captcha
session:
key: ADMIN_KAPTCHA_SESSION_KEY
date: ADMIN_KAPTCHA_SESSION_DATE
4、后端代码
package com.example.demo;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpSession;
import javax.xml.crypto.Data;
import java.util.Date;
@RequestMapping("/admin")
@RestController
public class KaptchaController {
//获取yml文件的对象
private static final String ADMIN_KAPTCHA_SESSION_KEY="ADMIN_KAPTCHA_SESSION_KEY";
private static final String ADMIN_KAPTCHA_SESSION_DATE="ADMIN_KAPTCHA_SESSION_DATE";
//定义过期时间
private static final long TIME_OUT=60*1000;//一分钟
//校验验证码是否正确
@RequestMapping("/check")
public boolean chech(String inputCaptcha, HttpSession session){
//1判断验证码是否为空
if(!StringUtils.hasLength(inputCaptcha)){
return false;
}
//2获取生成的验证码(因为我们生成的验证码存在session中)
//所以我们要从session中获取(生成的验证码,正确的验证码)
String saveCaptcha=(String) session.getAttribute(ADMIN_KAPTCHA_SESSION_KEY);
//获取验证码生成的时间
Date saveCaptchaDate=(Date) session.getAttribute(ADMIN_KAPTCHA_SESSION_DATE);
//3对比验证码是否一致(不区分大小写)
if(inputCaptcha.equalsIgnoreCase(saveCaptcha)){
if(saveCaptchaDate!=null||System.currentTimeMillis()-saveCaptchaDate.getTime()<TIME_OUT){
return true;
}
}
return false;
//4验证码是否过期
}
}
5、前端验证码页面代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>验证码</title>
<style>
#inputCaptcha {
height: 30px;
vertical-align: middle;
}
#verificationCodeImg{
vertical-align: middle;
}
#checkCaptcha{
height: 40px;
width: 100px;
}
</style>
</head>
<body>
<h1>输入验证码</h1>
<div id="confirm">
<input type="text" name="inputCaptcha" id="inputCaptcha">
<img id="verificationCodeImg" src="/admin/captcha" style="cursor: pointer;" title="看不清?换一张" />
<input type="button" value="提交" id="checkCaptcha">
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>
$("#verificationCodeImg").click(function(){
$(this).hide().attr('src', '/admin/captcha?dt=' + new Date().getTime()).fadeIn();
});
$("#checkCaptcha").click(function () {
$.ajax({
type:"get",
url:"/admin/check",
data:{
inputCaptcha:$("#inputCaptcha").val()
},
success:function(result){
if(result){
location.href="success.html";
}else{
alert("校验失败");
}
}
});
});
</script>
</body>
</html>
6、前端验证码成功跳转的页面代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>验证成功页</title>
</head>
<body>
<h1>验证成功</h1>
</body>
</html>