diff --git a/pom.xml b/pom.xml
index 57ca940..6c2c61d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
cloud.tianai.captcha
tianai-captcha
- 1.2.4
+ 1.3.0
tianai-captcha
滑块验证码
diff --git a/readme.md b/readme.md
index 0b8b4b8..61dc8a5 100644
--- a/readme.md
+++ b/readme.md
@@ -21,30 +21,51 @@
cloud.tianai.captcha
tianai-captcha
- 1.2.3
+ 1.3.0
```
2. 使用 `SliderCaptchaTemplate`获取滑块验证码
```java
public static void main(String[] args) throws InterruptedException {
SliderCaptchaResourceManager sliderCaptchaResourceManager = new DefaultSliderCaptchaResourceManager();
- DefaultSliderCaptchaTemplate sliderCaptchaTemplate = new DefaultSliderCaptchaTemplate(sliderCaptchaResourceManager, true);
+ StandardSliderCaptchaTemplate sliderCaptchaTemplate = new StandardSliderCaptchaTemplate(sliderCaptchaResourceManager, true);
// 生成滑块图片
SliderCaptchaInfo slideImageInfo = sliderCaptchaTemplate.getSlideImageInfo();
// 获取背景图片的base64
String backgroundImage = slideImageInfo.getBackgroundImage();
// 获取滑块图片
slideImageInfo.getSliderImage();
- // 获取滑块被背景图片的百分比, (校验图片使用)
- Float xPercent = slideImageInfo.getXPercent();
-
+
System.out.println(slideImageInfo);
+
+ // 计算滑块到凹槽的百分比,用户存到缓存中供校验使用
+ SliderCaptchaValidator sliderCaptchaValidator = new BasicCaptchaTrackValidator();
+ // 滑块的百分比
+ float percentage = sliderCaptchaValidator.calcPercentage(slideImageInfo.getX(), SliderCaptchaInfo.getBgImageWidth());
+
+ // 校验
+
+ // 用户传来的百分比和滑块的百分比校验是否正确,如果正确的话说明移动到了指定凹槽
+ boolean check =sliderCaptchaValidator.checkPercentage(0.2f, percentage);
+ // 用户传来的行为轨迹和滑动百分比进行校验,(有了滑动行为轨迹校验,是对 checkPercentage(..)方法的增强,建议使用这个方法进行校验 )
+ check = sliderCaptchaValidator.valid(sliderCaptchaTrack, percentage);
+
}
```
# 常用接口
-- 添加自定义图片资源
+- 自定义 `SliderCaptchaValidator` 校验器
```java
- ResourceStore resourceStore = sliderCaptchaResourceManager.getResourceStore();=
+// 该接口负责对用户滑动验证码后传回的数据进行校验,比如滑块是否滑到指定位置,滑块行为轨迹是否正常等等
+// 该接口的默认实现有
+// SimpleSliderCaptchaValidator 校验用户是否滑到了指定缺口处
+// BasicCaptchaTrackValidator 是对 SimpleSliderCaptchaValidator增强
+// BasicCaptchaTrackValidator是对SimpleSliderCaptchaValidator的增强 对滑动轨迹进行了简单的验证
+// 友情提示 因为BasicCaptchaTrackValidator 里面校验滑动轨迹的算法已经开源,有强制要求的建议重写该接口的方法,避免被破解
+```
+- 添加自定义图片资源
+ - 自定义图片资源大小为 590*360 格式为jpg
+```java
+ ResourceStore resourceStore = sliderCaptchaResourceManager.getResourceStore();
// 添加classpath目录下的 aa.jpg 图片
resourceStore.addResource(new Resource(ClassPathResourceProvider.NAME, "/aa.jpg"));
// 添加远程url图片资源
@@ -52,6 +73,11 @@ public static void main(String[] args) throws InterruptedException {
// 内置了通过url 和 classpath读取图片资源,如果想扩展可实现 ResourceProvider 接口,进行自定义扩展
```
- 添加自定义模板资源
+ - 系统内置了2套模板,可以到QQ群:1021884609 文件中获取更多模板或者自己制作模板
+ - 模板图片格式
+ - 滑块大小为 110*110 格式为png
+ - 凹槽大小为 110*110 格式为png
+ - 模板大小为 110*360 格式为png,该图为固定格式,是一张纯透明图片
```java
ResourceStore resourceStore = sliderCaptchaResourceManager.getResourceStore();=
Map template1 = new HashMap<>(4);
@@ -69,7 +95,7 @@ public static void main(String[] args) throws InterruptedException {
// 第二个构造参数设置为false时将不加载默认的图片和模板
SliderCaptchaTemplate sliderCaptchaTemplate = new DefaultSliderCaptchaTemplate(sliderCaptchaResourceManager, false);
```
-- 扩展,对`DefaultSliderCaptchaTemplate`增加了缓存模块
+- 扩展,对`StandardSliderCaptchaTemplate`增加了缓存模块
```java
public static void main(String[] args) throws InterruptedException {
// 使用 CacheSliderCaptchaTemplate 对滑块验证码进行缓存,使其提前生成滑块图片
@@ -78,15 +104,13 @@ public static void main(String[] args) throws InterruptedException {
// 参数三: 出错后 等待xx时间再进行生成
// 参数四: 检查时间间隔
SliderCaptchaResourceManager sliderCaptchaResourceManager = new DefaultSliderCaptchaResourceManager();
- DefaultSliderCaptchaTemplate sliderCaptchaTemplate = new CacheSliderCaptchaTemplate(new DefaultSliderCaptchaTemplate(sliderCaptchaResourceManager, true), 10, 1000, 100);
+ DefaultSliderCaptchaTemplate sliderCaptchaTemplate = new CacheSliderCaptchaTemplate(new StandardSliderCaptchaTemplate(sliderCaptchaResourceManager, true), 10, 1000, 100);
// 生成滑块图片
SliderCaptchaInfo slideImageInfo = sliderCaptchaTemplate.getSlideImageInfo();
// 获取背景图片的base64
String backgroundImage = slideImageInfo.getBackgroundImage();
// 获取滑块图片
slideImageInfo.getSliderImage();
- // 获取滑块被背景图片的百分比, (校验图片使用)
- Float xPercent = slideImageInfo.getXPercent();
System.out.println(slideImageInfo);
}
@@ -96,8 +120,8 @@ public static void main(String[] args) throws InterruptedException {
```java
// 实现了 ResourceProvider 后
SliderCaptchaResourceManager sliderCaptchaResourceManager = new DefaultSliderCaptchaResourceManager();
- DefaultSliderCaptchaTemplate sliderCaptchaTemplate = new DefaultSliderCaptchaTemplate(sliderCaptchaResourceManager, true);
+ StandardSliderCaptchaTemplate sliderCaptchaTemplate = new StandardSliderCaptchaTemplate(sliderCaptchaResourceManager, true);
// 注册
sliderCaptchaResourceManager.registerResourceProvider(new CustomResourceProvider());
```
-- qq群: 1021884609
\ No newline at end of file
+# qq群: 1021884609
\ No newline at end of file
diff --git a/src/main/java/cloud/tianai/captcha/template/slider/DefaultSliderCaptchaResourceManager.java b/src/main/java/cloud/tianai/captcha/template/slider/DefaultSliderCaptchaResourceManager.java
index ea61a48..c1cc7f6 100644
--- a/src/main/java/cloud/tianai/captcha/template/slider/DefaultSliderCaptchaResourceManager.java
+++ b/src/main/java/cloud/tianai/captcha/template/slider/DefaultSliderCaptchaResourceManager.java
@@ -1,6 +1,7 @@
package cloud.tianai.captcha.template.slider;
import cloud.tianai.captcha.template.slider.provider.ClassPathResourceProvider;
+import cloud.tianai.captcha.template.slider.provider.FileResourceProvider;
import cloud.tianai.captcha.template.slider.provider.URLResourceProvider;
import java.io.InputStream;
@@ -38,6 +39,7 @@ public class DefaultSliderCaptchaResourceManager implements SliderCaptchaResourc
// 注入一些默认的提供者
registerResourceProvider(new URLResourceProvider());
registerResourceProvider(new ClassPathResourceProvider());
+ registerResourceProvider(new FileResourceProvider());
}
@Override
diff --git a/src/main/java/cloud/tianai/captcha/template/slider/provider/FileResourceProvider.java b/src/main/java/cloud/tianai/captcha/template/slider/provider/FileResourceProvider.java
new file mode 100644
index 0000000..4c93fef
--- /dev/null
+++ b/src/main/java/cloud/tianai/captcha/template/slider/provider/FileResourceProvider.java
@@ -0,0 +1,35 @@
+package cloud.tianai.captcha.template.slider.provider;
+
+import cloud.tianai.captcha.template.slider.Resource;
+import lombok.SneakyThrows;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.net.URL;
+
+/**
+ * @Author: 天爱有情
+ * @date 2022/2/21 14:43
+ * @Description file
+ */
+public class FileResourceProvider extends AbstractResourceProvider {
+
+ public static final String NAME = "file";
+
+ @SneakyThrows
+ @Override
+ public InputStream doGetResourceInputStream(Resource data) {
+ FileInputStream fileInputStream = new FileInputStream(data.getData());
+ return fileInputStream;
+ }
+
+ @Override
+ public boolean supported(String type) {
+ return NAME.equalsIgnoreCase(type);
+ }
+
+ @Override
+ public String getName() {
+ return NAME;
+ }
+}
diff --git a/src/main/java/cloud/tianai/captcha/template/slider/provider/URLResourceProvider.java b/src/main/java/cloud/tianai/captcha/template/slider/provider/URLResourceProvider.java
index 1b87907..ae487e1 100644
--- a/src/main/java/cloud/tianai/captcha/template/slider/provider/URLResourceProvider.java
+++ b/src/main/java/cloud/tianai/captcha/template/slider/provider/URLResourceProvider.java
@@ -1,7 +1,6 @@
package cloud.tianai.captcha.template.slider.provider;
import cloud.tianai.captcha.template.slider.Resource;
-import cloud.tianai.captcha.template.slider.ResourceProvider;
import lombok.SneakyThrows;
import java.io.InputStream;