U 添加 ImageCaptchaGeneratorProvider

This commit is contained in:
天爱有情
2022-05-19 15:41:29 +08:00
parent fb516b6c42
commit 106eeda178
18 changed files with 215 additions and 71 deletions
+5
View File
@@ -65,6 +65,11 @@
<version>1.18.12</version> <version>1.18.12</version>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
@@ -41,11 +41,6 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
@Setter @Setter
/** 资源管理器. */ /** 资源管理器. */
protected ImageCaptchaResourceManager imageCaptchaResourceManager; protected ImageCaptchaResourceManager imageCaptchaResourceManager;
/** 初始化默认资源. */
@Getter
@Setter
protected boolean initDefaultResource = false;
@Getter @Getter
private boolean init = false; private boolean init = false;
@@ -53,14 +48,14 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
} }
@Override @Override
public ImageCaptchaGenerator init() { public ImageCaptchaGenerator init(boolean initDefaultResource) {
if (init) { if (init) {
return this; return this;
} }
init = true; init = true;
try { try {
log.info("图片验证码[{}]初始化...", this.getClass().getSimpleName()); log.info("图片验证码[{}]初始化...", this.getClass().getSimpleName());
doInit(); doInit(initDefaultResource);
} catch (Exception e) { } catch (Exception e) {
init = false; init = false;
log.error("[{}]初始化失败,ex", this.getClass().getSimpleName(), e); log.error("[{}]初始化失败,ex", this.getClass().getSimpleName(), e);
@@ -69,9 +64,8 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
return this; return this;
} }
public AbstractImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) { public AbstractImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
this.imageCaptchaResourceManager = imageCaptchaResourceManager; this.imageCaptchaResourceManager = imageCaptchaResourceManager;
this.initDefaultResource = initDefaultResource;
} }
@Override @Override
@@ -90,6 +84,13 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
.build()); .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 @Override
public ImageCaptchaResourceManager getImageResourceManager() { public ImageCaptchaResourceManager getImageResourceManager() {
@@ -15,8 +15,10 @@ public interface ImageCaptchaGenerator {
/** /**
* 初始化 * 初始化
* @param initDefaultResource 是否初始化默认资源
* @return ImageCaptchaGenerator
*/ */
ImageCaptchaGenerator init(); ImageCaptchaGenerator init(boolean initDefaultResource);
/** /**
* 生成验证码图片 * 生成验证码图片
@@ -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();
}
@@ -32,8 +32,8 @@ public abstract class AbstractClickImageCaptchaGenerator extends AbstractImageCa
protected Integer interferenceCount = 2; protected Integer interferenceCount = 2;
public AbstractClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) { public AbstractClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
super(imageCaptchaResourceManager, initDefaultResource); super(imageCaptchaResourceManager);
} }
public AbstractClickImageCaptchaGenerator() { public AbstractClickImageCaptchaGenerator() {
@@ -41,7 +41,7 @@ public abstract class AbstractClickImageCaptchaGenerator extends AbstractImageCa
@SneakyThrows @SneakyThrows
@Override @Override
public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) { public ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param) {
// 文字点选验证码不需要模板 只需要背景图 // 文字点选验证码不需要模板 只需要背景图
Collection<InputStream> inputStreams = new LinkedList<>(); Collection<InputStream> inputStreams = new LinkedList<>();
try { try {
@@ -38,6 +38,8 @@ public class CacheImageCaptchaGenerator implements ImageCaptchaGenerator {
@Setter @Setter
protected boolean requiredGetCaptcha = true; protected boolean requiredGetCaptcha = true;
private boolean init = false;
public CacheImageCaptchaGenerator(ImageCaptchaGenerator target, int size) { public CacheImageCaptchaGenerator(ImageCaptchaGenerator target, int size) {
this.target = target; this.target = target;
this.size = size; this.size = size;
@@ -66,6 +68,9 @@ public class CacheImageCaptchaGenerator implements ImageCaptchaGenerator {
} }
private void init(int z) { private void init(int z) {
if (init) {
return;
}
this.size = z; this.size = z;
// 初始化一个队列扫描 // 初始化一个队列扫描
scheduledExecutor.scheduleAtFixedRate(() -> queueMap.forEach((k, queue) -> { scheduledExecutor.scheduleAtFixedRate(() -> queueMap.forEach((k, queue) -> {
@@ -108,6 +113,7 @@ public class CacheImageCaptchaGenerator implements ImageCaptchaGenerator {
sleep(); sleep();
} }
}), 0, period, TimeUnit.MILLISECONDS); }), 0, period, TimeUnit.MILLISECONDS);
init = true;
} }
private void sleep() { private void sleep() {
@@ -118,8 +124,11 @@ public class CacheImageCaptchaGenerator implements ImageCaptchaGenerator {
} }
@Override @Override
public ImageCaptchaGenerator init() { public ImageCaptchaGenerator init(boolean initDefaultResource) {
return target.init(); ImageCaptchaGenerator captchaGenerator = target.init(initDefaultResource);
// 初始化缓存
init(size);;
return captchaGenerator;
} }
@SneakyThrows @SneakyThrows
@@ -161,11 +170,7 @@ public class CacheImageCaptchaGenerator implements ImageCaptchaGenerator {
@Override @Override
public ImageCaptchaInfo generateCaptchaImage(String type, String targetFormatName, String matrixFormatName) { public ImageCaptchaInfo generateCaptchaImage(String type, String targetFormatName, String matrixFormatName) {
return generateCaptchaImage(GenerateParam.builder() return generateCaptchaImage(GenerateParam.builder().type(type).backgroundFormatName(targetFormatName).sliderFormatName(matrixFormatName).build(), true);
.type(type)
.backgroundFormatName(targetFormatName)
.sliderFormatName(matrixFormatName)
.build(), true);
} }
@Override @Override
@@ -4,15 +4,19 @@ import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
import cloud.tianai.captcha.common.util.ObjectUtils; import cloud.tianai.captcha.common.util.ObjectUtils;
import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator; import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
import cloud.tianai.captcha.generator.ImageCaptchaGenerator; 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.GenerateParam;
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo; 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 cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.function.BiFunction;
/** /**
* @Author: 天爱有情 * @Author: 天爱有情
@@ -22,42 +26,40 @@ import java.util.function.BiFunction;
public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator { public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
protected Map<String, ImageCaptchaGenerator> imageCaptchaGeneratorMap = new HashMap<>(4); protected Map<String, ImageCaptchaGenerator> imageCaptchaGeneratorMap = new HashMap<>(4);
protected Map<String, BiFunction<String, MultiImageCaptchaGenerator, ImageCaptchaGenerator>> imageCaptchaGeneratorProviderMap = new HashMap<>(4); protected Map<String, ImageCaptchaGeneratorProvider> imageCaptchaGeneratorProviderMap = new HashMap<>(4);
@Setter @Setter
@Getter @Getter
private String defaultCaptcha = CaptchaTypeConstant.SLIDER; private String defaultCaptcha = CaptchaTypeConstant.SLIDER;
public MultiImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) { protected boolean initDefaultResource = false;
super(imageCaptchaResourceManager, initDefaultResource); public MultiImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
super(imageCaptchaResourceManager);
} }
@Override @Override
protected void doInit() { protected void doInit(boolean initDefaultResource) {
this.initDefaultResource = initDefaultResource;
// 滑块验证码 // 滑块验证码
addImageCaptchaGeneratorProvider(CaptchaTypeConstant.SLIDER, (type, context) -> addImageCaptchaGeneratorProvider(new StandardSliderImageImageCaptchaGeneratorProvider());
new StandardSliderImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init());
// 旋转验证码 // 旋转验证码
addImageCaptchaGeneratorProvider(CaptchaTypeConstant.ROTATE, (type, context) -> addImageCaptchaGeneratorProvider(new StandardRotateImageCaptchaGeneratorProvider());
new StandardRotateImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init());
// 拼接验证码 // 拼接验证码
addImageCaptchaGeneratorProvider(CaptchaTypeConstant.CONCAT, (type, context) -> addImageCaptchaGeneratorProvider(new StandardConcatImageCaptchaGeneratorProvider());
new StandardConcatImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init());
// 点选文字验证码 // 点选文字验证码
addImageCaptchaGeneratorProvider(CaptchaTypeConstant.WORD_IMAGE_CLICK, (type, context) -> addImageCaptchaGeneratorProvider(new StandardRandomWordClickImageCaptchaGeneratorProvider());
new StandardRandomWordClickImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init());
} }
public void addImageCaptchaGeneratorProvider(String key, BiFunction<String, MultiImageCaptchaGenerator, ImageCaptchaGenerator> provider) { public void addImageCaptchaGeneratorProvider(ImageCaptchaGeneratorProvider provider) {
imageCaptchaGeneratorProviderMap.put(key, provider); imageCaptchaGeneratorProviderMap.put(provider.getType(), provider);
} }
public BiFunction<String, MultiImageCaptchaGenerator, ImageCaptchaGenerator> removeImageCaptchaGeneratorProvider(String key) { public ImageCaptchaGeneratorProvider removeImageCaptchaGeneratorProvider(String type) {
return imageCaptchaGeneratorProviderMap.remove(key); return imageCaptchaGeneratorProviderMap.remove(type);
} }
public BiFunction<String, MultiImageCaptchaGenerator, ImageCaptchaGenerator> getImageCaptchaGeneratorProvider(String key) { public ImageCaptchaGeneratorProvider getImageCaptchaGeneratorProvider(String type) {
return imageCaptchaGeneratorProviderMap.get(key); return imageCaptchaGeneratorProviderMap.get(type);
} }
public void addImageCaptchaGenerator(String key, ImageCaptchaGenerator captchaGenerator) { public void addImageCaptchaGenerator(String key, ImageCaptchaGenerator captchaGenerator) {
@@ -73,7 +75,7 @@ public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
} }
@Override @Override
public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) { public ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param) {
String type = param.getType(); String type = param.getType();
if (ObjectUtils.isEmpty(type)) { if (ObjectUtils.isEmpty(type)) {
param.setType(defaultCaptcha); param.setType(defaultCaptcha);
@@ -86,11 +88,13 @@ public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
public ImageCaptchaGenerator requireGetCaptchaGenerator(String type) { public ImageCaptchaGenerator requireGetCaptchaGenerator(String type) {
ImageCaptchaGenerator imageCaptchaGenerator = imageCaptchaGeneratorMap.get(type); ImageCaptchaGenerator imageCaptchaGenerator = imageCaptchaGeneratorMap.get(type);
if (imageCaptchaGenerator == null) { if (imageCaptchaGenerator == null) {
BiFunction<String, MultiImageCaptchaGenerator, ImageCaptchaGenerator> provider = imageCaptchaGeneratorProviderMap.get(type); ImageCaptchaGeneratorProvider provider = imageCaptchaGeneratorProviderMap.get(type);
if (provider == null) { if (provider == null) {
throw new IllegalArgumentException("生成验证码失败,错误的type类型:" + type); 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; return imageCaptchaGenerator;
} }
@@ -27,14 +27,12 @@ import static cloud.tianai.captcha.generator.impl.StandardSliderImageCaptchaGene
*/ */
public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGenerator { public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
protected ImageCaptchaResourceManager imageCaptchaResourceManager; public StandardConcatImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
super(imageCaptchaResourceManager);
public StandardConcatImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) {
super(imageCaptchaResourceManager, initDefaultResource);
} }
@Override @Override
protected void doInit() { protected void doInit(boolean initDefaultResource) {
if (initDefaultResource) { if (initDefaultResource) {
initDefaultResource(); initDefaultResource();
} }
@@ -47,7 +45,7 @@ public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGen
} }
@Override @Override
public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) { public ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param) {
// 拼接验证码不需要模板 只需要背景图 // 拼接验证码不需要模板 只需要背景图
Collection<InputStream> inputStreams = new LinkedList<>(); Collection<InputStream> inputStreams = new LinkedList<>();
try { try {
@@ -59,15 +59,15 @@ public class StandardRandomWordClickImageCaptchaGenerator extends AbstractClickI
protected float currentFontTopCoef = 0.0f; protected float currentFontTopCoef = 0.0f;
@SneakyThrows @SneakyThrows
public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) { public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
super(imageCaptchaResourceManager, initDefaultResource); super(imageCaptchaResourceManager);
this.imageCaptchaResourceManager = imageCaptchaResourceManager; this.imageCaptchaResourceManager = imageCaptchaResourceManager;
} }
@Override @Override
@SneakyThrows({IOException.class, FontFormatException.class}) @SneakyThrows({IOException.class, FontFormatException.class})
protected void doInit() { protected void doInit(boolean initDefaultResource) {
if (this.font == null) { if (this.font == null) {
// 使用默认字体 // 使用默认字体
Resource fontResource = new Resource(null, "META-INF/fonts/SIMSUN.TTC"); Resource fontResource = new Resource(null, "META-INF/fonts/SIMSUN.TTC");
@@ -82,11 +82,8 @@ public class StandardRandomWordClickImageCaptchaGenerator extends AbstractClickI
} }
} }
public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, Font font) {
boolean initDefaultResource, super(imageCaptchaResourceManager);
Font font) {
super(imageCaptchaResourceManager, initDefaultResource);
this.imageCaptchaResourceManager = imageCaptchaResourceManager;
this.font = font; this.font = font;
} }
@@ -31,13 +31,13 @@ public class StandardRotateImageCaptchaGenerator extends AbstractImageCaptchaGen
protected final ImageCaptchaResourceManager imageCaptchaResourceManager; protected final ImageCaptchaResourceManager imageCaptchaResourceManager;
public StandardRotateImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) { public StandardRotateImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
super(imageCaptchaResourceManager, initDefaultResource); super(imageCaptchaResourceManager);
this.imageCaptchaResourceManager = imageCaptchaResourceManager; this.imageCaptchaResourceManager = imageCaptchaResourceManager;
} }
@Override @Override
protected void doInit() { protected void doInit(boolean initDefaultResource) {
if (initDefaultResource) { if (initDefaultResource) {
initDefaultResource(); initDefaultResource();
} }
@@ -57,7 +57,7 @@ public class StandardRotateImageCaptchaGenerator extends AbstractImageCaptchaGen
} }
@Override @Override
public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) { public ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param) {
// 旋转验证码没有混淆 // 旋转验证码没有混淆
Map<String, Resource> templateImages = imageCaptchaResourceManager.randomGetTemplate(param.getType()); Map<String, Resource> templateImages = imageCaptchaResourceManager.randomGetTemplate(param.getType());
if (templateImages == null || templateImages.isEmpty()) { if (templateImages == null || templateImages.isEmpty()) {
@@ -40,13 +40,12 @@ public class StandardSliderImageCaptchaGenerator extends AbstractImageCaptchaGen
*/ */
public static final String DEFAULT_SLIDER_IMAGE_TEMPLATE_PATH = "META-INF/cut-image/template"; public static final String DEFAULT_SLIDER_IMAGE_TEMPLATE_PATH = "META-INF/cut-image/template";
public StandardSliderImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, public StandardSliderImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
boolean initDefaultResource) { super(imageCaptchaResourceManager);
super(imageCaptchaResourceManager, initDefaultResource);
} }
@Override @Override
protected void doInit() { protected void doInit(boolean initDefaultResource) {
if (initDefaultResource) { if (initDefaultResource) {
initDefaultResource(); initDefaultResource();
} }
@@ -54,7 +53,7 @@ public class StandardSliderImageCaptchaGenerator extends AbstractImageCaptchaGen
@SneakyThrows @SneakyThrows
@Override @Override
public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) { public ImageCaptchaInfo doGenerateCaptchaImage(GenerateParam param) {
Boolean obfuscate = param.getObfuscate(); Boolean obfuscate = param.getObfuscate();
Map<String, Resource> templateImages = imageCaptchaResourceManager.randomGetTemplate(param.getType()); Map<String, Resource> templateImages = imageCaptchaResourceManager.randomGetTemplate(param.getType());
if (templateImages == null || templateImages.isEmpty()) { if (templateImages == null || templateImages.isEmpty()) {
@@ -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;
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -17,7 +17,6 @@ import cloud.tianai.captcha.validator.impl.BasicCaptchaTrackValidator;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; 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; import static cloud.tianai.captcha.generator.impl.StandardSliderImageCaptchaGenerator.DEFAULT_SLIDER_IMAGE_TEMPLATE_PATH;
public class CaptchaGenTest { 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() GenerateParam generateParam = GenerateParam.builder()
.type(CaptchaTypeConstant.SLIDER) .type(CaptchaTypeConstant.SLIDER)
.backgroundFormatName("webp") .backgroundFormatName("webp")
@@ -25,9 +25,9 @@ public class StandardRotateCaptchaGeneratorTest {
ImageCaptchaResourceManager imageCaptchaResourceManager = new DefaultImageCaptchaResourceManager(resourceStore); 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)); 20, 1000, 100, TimeUnit.MINUTES.toMillis(3));
standardRotateImageCaptchaGenerator.initSchedule(); standardRotateImageCaptchaGenerator.init(true);
ImageCaptchaInfo imageCaptchaInfo = standardRotateImageCaptchaGenerator.generateCaptchaImage(CaptchaTypeConstant.ROTATE); ImageCaptchaInfo imageCaptchaInfo = standardRotateImageCaptchaGenerator.generateCaptchaImage(CaptchaTypeConstant.ROTATE);
System.out.println("backgroundImage:" + imageCaptchaInfo.getBackgroundImage()); System.out.println("backgroundImage:" + imageCaptchaInfo.getBackgroundImage());
System.out.println("sliderImage:" + imageCaptchaInfo.getSliderImage()); System.out.println("sliderImage:" + imageCaptchaInfo.getSliderImage());
@@ -17,7 +17,7 @@ public class StandardWordClickImageCaptchaGeneratorTest {
ImageCaptchaResourceManager imageCaptchaResourceManager = new DefaultImageCaptchaResourceManager(); ImageCaptchaResourceManager imageCaptchaResourceManager = new DefaultImageCaptchaResourceManager();
ImageCaptchaGenerator defaultImageCaptchaResourceManager = ImageCaptchaGenerator defaultImageCaptchaResourceManager =
new StandardRandomWordClickImageCaptchaGenerator(imageCaptchaResourceManager, true).init(); new StandardRandomWordClickImageCaptchaGenerator(imageCaptchaResourceManager).init(true);
GenerateParam generateParam = new GenerateParam(); GenerateParam generateParam = new GenerateParam();
generateParam.setType(CaptchaTypeConstant.WORD_IMAGE_CLICK); generateParam.setType(CaptchaTypeConstant.WORD_IMAGE_CLICK);