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);