diff --git a/pom.xml b/pom.xml
index b64fd2a..6b1ed36 100644
--- a/pom.xml
+++ b/pom.xml
@@ -65,6 +65,11 @@
1.18.12
true
+
+ org.slf4j
+ slf4j-api
+ 1.7.30
+
diff --git a/src/main/java/cloud/tianai/captcha/generator/AbstractImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/AbstractImageCaptchaGenerator.java
index 20cd10f..7e57a9b 100644
--- a/src/main/java/cloud/tianai/captcha/generator/AbstractImageCaptchaGenerator.java
+++ b/src/main/java/cloud/tianai/captcha/generator/AbstractImageCaptchaGenerator.java
@@ -41,11 +41,6 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
@Setter
/** 资源管理器. */
protected ImageCaptchaResourceManager imageCaptchaResourceManager;
- /** 初始化默认资源. */
- @Getter
- @Setter
- protected boolean initDefaultResource = false;
-
@Getter
private boolean init = false;
@@ -53,14 +48,14 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
}
@Override
- public ImageCaptchaGenerator init() {
+ public ImageCaptchaGenerator init(boolean initDefaultResource) {
if (init) {
return this;
}
init = true;
try {
log.info("图片验证码[{}]初始化...", this.getClass().getSimpleName());
- doInit();
+ doInit(initDefaultResource);
} catch (Exception e) {
init = false;
log.error("[{}]初始化失败,ex", this.getClass().getSimpleName(), e);
@@ -69,9 +64,8 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
return this;
}
- public AbstractImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
+ public AbstractImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
- this.initDefaultResource = initDefaultResource;
}
@Override
@@ -90,6 +84,13 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
.build());
}
+ @Override
+ public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) {
+ assertInit();
+ return doGenerateCaptchaImage(param);
+ }
+
+
/**
* 将图片转换成字符串格式
*
@@ -143,10 +144,26 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
}
+ protected void assertInit() {
+ if (!init) {
+ throw new IllegalStateException("请先调用 init(...) 初始化方法进行初始化");
+ }
+ }
+
/**
* 初始化
+ *
+ * @param initDefaultResource 是否初始化默认资源
*/
- protected abstract void doInit();
+ protected abstract void doInit(boolean initDefaultResource);
+
+ /**
+ * 生成验证码方法
+ *
+ * @param param param
+ * @return ImageCaptchaInfo
+ */
+ protected abstract ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param);
@Override
public ImageCaptchaResourceManager getImageResourceManager() {
diff --git a/src/main/java/cloud/tianai/captcha/generator/ImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/ImageCaptchaGenerator.java
index 44d96a4..cd23355 100644
--- a/src/main/java/cloud/tianai/captcha/generator/ImageCaptchaGenerator.java
+++ b/src/main/java/cloud/tianai/captcha/generator/ImageCaptchaGenerator.java
@@ -15,8 +15,10 @@ public interface ImageCaptchaGenerator {
/**
* 初始化
+ * @param initDefaultResource 是否初始化默认资源
+ * @return ImageCaptchaGenerator
*/
- ImageCaptchaGenerator init();
+ ImageCaptchaGenerator init(boolean initDefaultResource);
/**
* 生成验证码图片
diff --git a/src/main/java/cloud/tianai/captcha/generator/ImageCaptchaGeneratorProvider.java b/src/main/java/cloud/tianai/captcha/generator/ImageCaptchaGeneratorProvider.java
new file mode 100644
index 0000000..b82d722
--- /dev/null
+++ b/src/main/java/cloud/tianai/captcha/generator/ImageCaptchaGeneratorProvider.java
@@ -0,0 +1,27 @@
+package cloud.tianai.captcha.generator;
+
+
+import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
+
+/**
+ * @Author: 天爱有情
+ * @date 2022/5/19 14:45
+ * @Description ImageCaptchaGenerator 提供者
+ */
+public interface ImageCaptchaGeneratorProvider {
+
+ /**
+ * 生成/获取 ImageCaptchaGenerator
+ *
+ * @param resourceManager resourceManager
+ * @return ImageCaptchaGenerator
+ */
+ ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager);
+
+ /**
+ * 验证码类型
+ *
+ * @return String
+ */
+ String getType();
+}
diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/AbstractClickImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/AbstractClickImageCaptchaGenerator.java
index cc2700a..7d847d9 100644
--- a/src/main/java/cloud/tianai/captcha/generator/impl/AbstractClickImageCaptchaGenerator.java
+++ b/src/main/java/cloud/tianai/captcha/generator/impl/AbstractClickImageCaptchaGenerator.java
@@ -32,8 +32,8 @@ public abstract class AbstractClickImageCaptchaGenerator extends AbstractImageCa
protected Integer interferenceCount = 2;
- public AbstractClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
- super(imageCaptchaResourceManager, initDefaultResource);
+ public AbstractClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
+ super(imageCaptchaResourceManager);
}
public AbstractClickImageCaptchaGenerator() {
@@ -41,7 +41,7 @@ public abstract class AbstractClickImageCaptchaGenerator extends AbstractImageCa
@SneakyThrows
@Override
- public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) {
+ public ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param) {
// 文字点选验证码不需要模板 只需要背景图
Collection inputStreams = new LinkedList<>();
try {
diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/CacheImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/CacheImageCaptchaGenerator.java
index ce15468..51308b7 100644
--- a/src/main/java/cloud/tianai/captcha/generator/impl/CacheImageCaptchaGenerator.java
+++ b/src/main/java/cloud/tianai/captcha/generator/impl/CacheImageCaptchaGenerator.java
@@ -38,6 +38,8 @@ public class CacheImageCaptchaGenerator implements ImageCaptchaGenerator {
@Setter
protected boolean requiredGetCaptcha = true;
+ private boolean init = false;
+
public CacheImageCaptchaGenerator(ImageCaptchaGenerator target, int size) {
this.target = target;
this.size = size;
@@ -66,6 +68,9 @@ public class CacheImageCaptchaGenerator implements ImageCaptchaGenerator {
}
private void init(int z) {
+ if (init) {
+ return;
+ }
this.size = z;
// 初始化一个队列扫描
scheduledExecutor.scheduleAtFixedRate(() -> queueMap.forEach((k, queue) -> {
@@ -108,6 +113,7 @@ public class CacheImageCaptchaGenerator implements ImageCaptchaGenerator {
sleep();
}
}), 0, period, TimeUnit.MILLISECONDS);
+ init = true;
}
private void sleep() {
@@ -118,8 +124,11 @@ public class CacheImageCaptchaGenerator implements ImageCaptchaGenerator {
}
@Override
- public ImageCaptchaGenerator init() {
- return target.init();
+ public ImageCaptchaGenerator init(boolean initDefaultResource) {
+ ImageCaptchaGenerator captchaGenerator = target.init(initDefaultResource);
+ // 初始化缓存
+ init(size);;
+ return captchaGenerator;
}
@SneakyThrows
@@ -161,11 +170,7 @@ public class CacheImageCaptchaGenerator implements ImageCaptchaGenerator {
@Override
public ImageCaptchaInfo generateCaptchaImage(String type, String targetFormatName, String matrixFormatName) {
- return generateCaptchaImage(GenerateParam.builder()
- .type(type)
- .backgroundFormatName(targetFormatName)
- .sliderFormatName(matrixFormatName)
- .build(), true);
+ return generateCaptchaImage(GenerateParam.builder().type(type).backgroundFormatName(targetFormatName).sliderFormatName(matrixFormatName).build(), true);
}
@Override
diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/MultiImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/MultiImageCaptchaGenerator.java
index cfdb76b..d4e1444 100644
--- a/src/main/java/cloud/tianai/captcha/generator/impl/MultiImageCaptchaGenerator.java
+++ b/src/main/java/cloud/tianai/captcha/generator/impl/MultiImageCaptchaGenerator.java
@@ -4,15 +4,19 @@ import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
import cloud.tianai.captcha.common.util.ObjectUtils;
import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
+import cloud.tianai.captcha.generator.ImageCaptchaGeneratorProvider;
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
+import cloud.tianai.captcha.generator.impl.provider.StandardConcatImageCaptchaGeneratorProvider;
+import cloud.tianai.captcha.generator.impl.provider.StandardRandomWordClickImageCaptchaGeneratorProvider;
+import cloud.tianai.captcha.generator.impl.provider.StandardRotateImageCaptchaGeneratorProvider;
+import cloud.tianai.captcha.generator.impl.provider.StandardSliderImageImageCaptchaGeneratorProvider;
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
import lombok.Getter;
import lombok.Setter;
import java.util.HashMap;
import java.util.Map;
-import java.util.function.BiFunction;
/**
* @Author: 天爱有情
@@ -22,42 +26,40 @@ import java.util.function.BiFunction;
public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
protected Map imageCaptchaGeneratorMap = new HashMap<>(4);
- protected Map> imageCaptchaGeneratorProviderMap = new HashMap<>(4);
+ protected Map imageCaptchaGeneratorProviderMap = new HashMap<>(4);
@Setter
@Getter
private String defaultCaptcha = CaptchaTypeConstant.SLIDER;
- public MultiImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
- super(imageCaptchaResourceManager, initDefaultResource);
+ protected boolean initDefaultResource = false;
+ public MultiImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
+ super(imageCaptchaResourceManager);
}
@Override
- protected void doInit() {
+ protected void doInit(boolean initDefaultResource) {
+ this.initDefaultResource = initDefaultResource;
// 滑块验证码
- addImageCaptchaGeneratorProvider(CaptchaTypeConstant.SLIDER, (type, context) ->
- new StandardSliderImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init());
+ addImageCaptchaGeneratorProvider(new StandardSliderImageImageCaptchaGeneratorProvider());
// 旋转验证码
- addImageCaptchaGeneratorProvider(CaptchaTypeConstant.ROTATE, (type, context) ->
- new StandardRotateImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init());
+ addImageCaptchaGeneratorProvider(new StandardRotateImageCaptchaGeneratorProvider());
// 拼接验证码
- addImageCaptchaGeneratorProvider(CaptchaTypeConstant.CONCAT, (type, context) ->
- new StandardConcatImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init());
+ addImageCaptchaGeneratorProvider(new StandardConcatImageCaptchaGeneratorProvider());
// 点选文字验证码
- addImageCaptchaGeneratorProvider(CaptchaTypeConstant.WORD_IMAGE_CLICK, (type, context) ->
- new StandardRandomWordClickImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init());
+ addImageCaptchaGeneratorProvider(new StandardRandomWordClickImageCaptchaGeneratorProvider());
}
- public void addImageCaptchaGeneratorProvider(String key, BiFunction provider) {
- imageCaptchaGeneratorProviderMap.put(key, provider);
+ public void addImageCaptchaGeneratorProvider(ImageCaptchaGeneratorProvider provider) {
+ imageCaptchaGeneratorProviderMap.put(provider.getType(), provider);
}
- public BiFunction removeImageCaptchaGeneratorProvider(String key) {
- return imageCaptchaGeneratorProviderMap.remove(key);
+ public ImageCaptchaGeneratorProvider removeImageCaptchaGeneratorProvider(String type) {
+ return imageCaptchaGeneratorProviderMap.remove(type);
}
- public BiFunction getImageCaptchaGeneratorProvider(String key) {
- return imageCaptchaGeneratorProviderMap.get(key);
+ public ImageCaptchaGeneratorProvider getImageCaptchaGeneratorProvider(String type) {
+ return imageCaptchaGeneratorProviderMap.get(type);
}
public void addImageCaptchaGenerator(String key, ImageCaptchaGenerator captchaGenerator) {
@@ -73,7 +75,7 @@ public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
}
@Override
- public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) {
+ public ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param) {
String type = param.getType();
if (ObjectUtils.isEmpty(type)) {
param.setType(defaultCaptcha);
@@ -86,11 +88,13 @@ public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
public ImageCaptchaGenerator requireGetCaptchaGenerator(String type) {
ImageCaptchaGenerator imageCaptchaGenerator = imageCaptchaGeneratorMap.get(type);
if (imageCaptchaGenerator == null) {
- BiFunction provider = imageCaptchaGeneratorProviderMap.get(type);
+ ImageCaptchaGeneratorProvider provider = imageCaptchaGeneratorProviderMap.get(type);
if (provider == null) {
throw new IllegalArgumentException("生成验证码失败,错误的type类型:" + type);
}
- imageCaptchaGenerator = imageCaptchaGeneratorMap.computeIfAbsent(type, k -> provider.apply(k, this));
+ imageCaptchaGenerator = imageCaptchaGeneratorMap.computeIfAbsent(type, k ->
+ // get and init
+ provider.get(getImageCaptchaResourceManager()).init(initDefaultResource));
}
return imageCaptchaGenerator;
}
diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/StandardConcatImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/StandardConcatImageCaptchaGenerator.java
index be4d4ec..01c4911 100644
--- a/src/main/java/cloud/tianai/captcha/generator/impl/StandardConcatImageCaptchaGenerator.java
+++ b/src/main/java/cloud/tianai/captcha/generator/impl/StandardConcatImageCaptchaGenerator.java
@@ -27,14 +27,12 @@ import static cloud.tianai.captcha.generator.impl.StandardSliderImageCaptchaGene
*/
public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
- protected ImageCaptchaResourceManager imageCaptchaResourceManager;
-
- public StandardConcatImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
- super(imageCaptchaResourceManager, initDefaultResource);
+ public StandardConcatImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
+ super(imageCaptchaResourceManager);
}
@Override
- protected void doInit() {
+ protected void doInit(boolean initDefaultResource) {
if (initDefaultResource) {
initDefaultResource();
}
@@ -47,7 +45,7 @@ public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGen
}
@Override
- public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) {
+ public ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param) {
// 拼接验证码不需要模板 只需要背景图
Collection inputStreams = new LinkedList<>();
try {
diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/StandardRandomWordClickImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/StandardRandomWordClickImageCaptchaGenerator.java
index 48ceffc..cd7f1d0 100644
--- a/src/main/java/cloud/tianai/captcha/generator/impl/StandardRandomWordClickImageCaptchaGenerator.java
+++ b/src/main/java/cloud/tianai/captcha/generator/impl/StandardRandomWordClickImageCaptchaGenerator.java
@@ -59,15 +59,15 @@ public class StandardRandomWordClickImageCaptchaGenerator extends AbstractClickI
protected float currentFontTopCoef = 0.0f;
@SneakyThrows
- public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
- super(imageCaptchaResourceManager, initDefaultResource);
+ public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
+ super(imageCaptchaResourceManager);
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
}
@Override
@SneakyThrows({IOException.class, FontFormatException.class})
- protected void doInit() {
+ protected void doInit(boolean initDefaultResource) {
if (this.font == null) {
// 使用默认字体
Resource fontResource = new Resource(null, "META-INF/fonts/SIMSUN.TTC");
@@ -82,11 +82,8 @@ public class StandardRandomWordClickImageCaptchaGenerator extends AbstractClickI
}
}
- public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager,
- boolean initDefaultResource,
- Font font) {
- super(imageCaptchaResourceManager, initDefaultResource);
- this.imageCaptchaResourceManager = imageCaptchaResourceManager;
+ public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, Font font) {
+ super(imageCaptchaResourceManager);
this.font = font;
}
diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/StandardRotateImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/StandardRotateImageCaptchaGenerator.java
index 3fb3a8f..00bb30b 100644
--- a/src/main/java/cloud/tianai/captcha/generator/impl/StandardRotateImageCaptchaGenerator.java
+++ b/src/main/java/cloud/tianai/captcha/generator/impl/StandardRotateImageCaptchaGenerator.java
@@ -31,13 +31,13 @@ public class StandardRotateImageCaptchaGenerator extends AbstractImageCaptchaGen
protected final ImageCaptchaResourceManager imageCaptchaResourceManager;
- public StandardRotateImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
- super(imageCaptchaResourceManager, initDefaultResource);
+ public StandardRotateImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
+ super(imageCaptchaResourceManager);
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
}
@Override
- protected void doInit() {
+ protected void doInit(boolean initDefaultResource) {
if (initDefaultResource) {
initDefaultResource();
}
@@ -57,7 +57,7 @@ public class StandardRotateImageCaptchaGenerator extends AbstractImageCaptchaGen
}
@Override
- public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) {
+ public ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param) {
// 旋转验证码没有混淆
Map templateImages = imageCaptchaResourceManager.randomGetTemplate(param.getType());
if (templateImages == null || templateImages.isEmpty()) {
diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/StandardSliderImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/StandardSliderImageCaptchaGenerator.java
index 35e77ac..a96a591 100644
--- a/src/main/java/cloud/tianai/captcha/generator/impl/StandardSliderImageCaptchaGenerator.java
+++ b/src/main/java/cloud/tianai/captcha/generator/impl/StandardSliderImageCaptchaGenerator.java
@@ -40,13 +40,12 @@ public class StandardSliderImageCaptchaGenerator extends AbstractImageCaptchaGen
*/
public static final String DEFAULT_SLIDER_IMAGE_TEMPLATE_PATH = "META-INF/cut-image/template";
- public StandardSliderImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager,
- boolean initDefaultResource) {
- super(imageCaptchaResourceManager, initDefaultResource);
+ public StandardSliderImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
+ super(imageCaptchaResourceManager);
}
@Override
- protected void doInit() {
+ protected void doInit(boolean initDefaultResource) {
if (initDefaultResource) {
initDefaultResource();
}
@@ -54,7 +53,7 @@ public class StandardSliderImageCaptchaGenerator extends AbstractImageCaptchaGen
@SneakyThrows
@Override
- public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) {
+ public ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param) {
Boolean obfuscate = param.getObfuscate();
Map templateImages = imageCaptchaResourceManager.randomGetTemplate(param.getType());
if (templateImages == null || templateImages.isEmpty()) {
diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/provider/StandardConcatImageCaptchaGeneratorProvider.java b/src/main/java/cloud/tianai/captcha/generator/impl/provider/StandardConcatImageCaptchaGeneratorProvider.java
new file mode 100644
index 0000000..744112d
--- /dev/null
+++ b/src/main/java/cloud/tianai/captcha/generator/impl/provider/StandardConcatImageCaptchaGeneratorProvider.java
@@ -0,0 +1,23 @@
+package cloud.tianai.captcha.generator.impl.provider;
+
+import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
+import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
+import cloud.tianai.captcha.generator.ImageCaptchaGeneratorProvider;
+import cloud.tianai.captcha.generator.impl.StandardConcatImageCaptchaGenerator;
+import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
+/**
+ * @Author: 天爱有情
+ * @date 2022/5/19 15:12
+ * @Description 滑动还原验证码
+ */
+public class StandardConcatImageCaptchaGeneratorProvider implements ImageCaptchaGeneratorProvider {
+ @Override
+ public ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager) {
+ return new StandardConcatImageCaptchaGenerator(resourceManager);
+ }
+
+ @Override
+ public String getType() {
+ return CaptchaTypeConstant.CONCAT;
+ }
+}
diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/provider/StandardRandomWordClickImageCaptchaGeneratorProvider.java b/src/main/java/cloud/tianai/captcha/generator/impl/provider/StandardRandomWordClickImageCaptchaGeneratorProvider.java
new file mode 100644
index 0000000..6de075a
--- /dev/null
+++ b/src/main/java/cloud/tianai/captcha/generator/impl/provider/StandardRandomWordClickImageCaptchaGeneratorProvider.java
@@ -0,0 +1,19 @@
+package cloud.tianai.captcha.generator.impl.provider;
+
+import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
+import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
+import cloud.tianai.captcha.generator.ImageCaptchaGeneratorProvider;
+import cloud.tianai.captcha.generator.impl.StandardRandomWordClickImageCaptchaGenerator;
+import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
+
+public class StandardRandomWordClickImageCaptchaGeneratorProvider implements ImageCaptchaGeneratorProvider {
+ @Override
+ public ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager) {
+ return new StandardRandomWordClickImageCaptchaGenerator(resourceManager);
+ }
+
+ @Override
+ public String getType() {
+ return CaptchaTypeConstant.WORD_IMAGE_CLICK;
+ }
+}
diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/provider/StandardRotateImageCaptchaGeneratorProvider.java b/src/main/java/cloud/tianai/captcha/generator/impl/provider/StandardRotateImageCaptchaGeneratorProvider.java
new file mode 100644
index 0000000..3fb30d7
--- /dev/null
+++ b/src/main/java/cloud/tianai/captcha/generator/impl/provider/StandardRotateImageCaptchaGeneratorProvider.java
@@ -0,0 +1,24 @@
+package cloud.tianai.captcha.generator.impl.provider;
+
+import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
+import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
+import cloud.tianai.captcha.generator.ImageCaptchaGeneratorProvider;
+import cloud.tianai.captcha.generator.impl.StandardRotateImageCaptchaGenerator;
+import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
+
+/**
+ * @Author: 天爱有情
+ * @date 2022/5/19 15:14
+ * @Description 旋转验证码
+ */
+public class StandardRotateImageCaptchaGeneratorProvider implements ImageCaptchaGeneratorProvider {
+ @Override
+ public ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager) {
+ return new StandardRotateImageCaptchaGenerator(resourceManager);
+ }
+
+ @Override
+ public String getType() {
+ return CaptchaTypeConstant.ROTATE;
+ }
+}
diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/provider/StandardSliderImageImageCaptchaGeneratorProvider.java b/src/main/java/cloud/tianai/captcha/generator/impl/provider/StandardSliderImageImageCaptchaGeneratorProvider.java
new file mode 100644
index 0000000..7e7e5ad
--- /dev/null
+++ b/src/main/java/cloud/tianai/captcha/generator/impl/provider/StandardSliderImageImageCaptchaGeneratorProvider.java
@@ -0,0 +1,24 @@
+package cloud.tianai.captcha.generator.impl.provider;
+
+import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
+import cloud.tianai.captcha.generator.ImageCaptchaGeneratorProvider;
+import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
+import cloud.tianai.captcha.generator.impl.StandardSliderImageCaptchaGenerator;
+import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
+
+/**
+ * @Author: 天爱有情
+ * @date 2022/5/19 15:09
+ * @Description 滑动验证码 生成器
+ */
+public class StandardSliderImageImageCaptchaGeneratorProvider implements ImageCaptchaGeneratorProvider {
+ @Override
+ public ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager) {
+ return new StandardSliderImageCaptchaGenerator(resourceManager);
+ }
+
+ @Override
+ public String getType() {
+ return CaptchaTypeConstant.SLIDER;
+ }
+}
diff --git a/src/main/test/java/example/CaptchaGenTest.java b/src/main/test/java/example/CaptchaGenTest.java
index f9fb32f..9277bfa 100644
--- a/src/main/test/java/example/CaptchaGenTest.java
+++ b/src/main/test/java/example/CaptchaGenTest.java
@@ -17,7 +17,6 @@ import cloud.tianai.captcha.validator.impl.BasicCaptchaTrackValidator;
import java.util.HashMap;
import java.util.Map;
-import static cloud.tianai.captcha.generator.impl.StandardSliderImageCaptchaGenerator.DEFAULT_SLIDER_IMAGE_RESOURCE_PATH;
import static cloud.tianai.captcha.generator.impl.StandardSliderImageCaptchaGenerator.DEFAULT_SLIDER_IMAGE_TEMPLATE_PATH;
public class CaptchaGenTest {
@@ -37,7 +36,8 @@ public class CaptchaGenTest {
- MultiImageCaptchaGenerator imageCaptchaGenerator = new MultiImageCaptchaGenerator(imageCaptchaResourceManager, false);
+ MultiImageCaptchaGenerator imageCaptchaGenerator = new MultiImageCaptchaGenerator(imageCaptchaResourceManager);
+ imageCaptchaGenerator.init(false);
GenerateParam generateParam = GenerateParam.builder()
.type(CaptchaTypeConstant.SLIDER)
.backgroundFormatName("webp")
diff --git a/src/main/test/java/example/StandardRotateCaptchaGeneratorTest.java b/src/main/test/java/example/StandardRotateCaptchaGeneratorTest.java
index ed58a90..c824258 100644
--- a/src/main/test/java/example/StandardRotateCaptchaGeneratorTest.java
+++ b/src/main/test/java/example/StandardRotateCaptchaGeneratorTest.java
@@ -25,9 +25,9 @@ public class StandardRotateCaptchaGeneratorTest {
ImageCaptchaResourceManager imageCaptchaResourceManager = new DefaultImageCaptchaResourceManager(resourceStore);
- CacheImageCaptchaGenerator standardRotateImageCaptchaGenerator = new CacheImageCaptchaGenerator(new StandardRotateImageCaptchaGenerator(imageCaptchaResourceManager, true),
+ CacheImageCaptchaGenerator standardRotateImageCaptchaGenerator = new CacheImageCaptchaGenerator(new StandardRotateImageCaptchaGenerator(imageCaptchaResourceManager),
20, 1000, 100, TimeUnit.MINUTES.toMillis(3));
- standardRotateImageCaptchaGenerator.initSchedule();
+ standardRotateImageCaptchaGenerator.init(true);
ImageCaptchaInfo imageCaptchaInfo = standardRotateImageCaptchaGenerator.generateCaptchaImage(CaptchaTypeConstant.ROTATE);
System.out.println("backgroundImage:" + imageCaptchaInfo.getBackgroundImage());
System.out.println("sliderImage:" + imageCaptchaInfo.getSliderImage());
diff --git a/src/main/test/java/example/StandardWordClickImageCaptchaGeneratorTest.java b/src/main/test/java/example/StandardWordClickImageCaptchaGeneratorTest.java
index 0990924..391f604 100644
--- a/src/main/test/java/example/StandardWordClickImageCaptchaGeneratorTest.java
+++ b/src/main/test/java/example/StandardWordClickImageCaptchaGeneratorTest.java
@@ -17,7 +17,7 @@ public class StandardWordClickImageCaptchaGeneratorTest {
ImageCaptchaResourceManager imageCaptchaResourceManager = new DefaultImageCaptchaResourceManager();
ImageCaptchaGenerator defaultImageCaptchaResourceManager =
- new StandardRandomWordClickImageCaptchaGenerator(imageCaptchaResourceManager, true).init();
+ new StandardRandomWordClickImageCaptchaGenerator(imageCaptchaResourceManager).init(true);
GenerateParam generateParam = new GenerateParam();
generateParam.setType(CaptchaTypeConstant.WORD_IMAGE_CLICK);