mirror of
https://github.com/dromara/tianai-captcha.git
synced 2026-05-07 06:04:34 +08:00
U 添加 ImageCaptchaGeneratorProvider
This commit is contained in:
@@ -65,6 +65,11 @@
|
||||
<version>1.18.12</version>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>1.7.30</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
+3
-3
@@ -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<InputStream> inputStreams = new LinkedList<>();
|
||||
try {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<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
|
||||
@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<String, MultiImageCaptchaGenerator, ImageCaptchaGenerator> provider) {
|
||||
imageCaptchaGeneratorProviderMap.put(key, provider);
|
||||
public void addImageCaptchaGeneratorProvider(ImageCaptchaGeneratorProvider provider) {
|
||||
imageCaptchaGeneratorProviderMap.put(provider.getType(), provider);
|
||||
}
|
||||
|
||||
public BiFunction<String, MultiImageCaptchaGenerator, ImageCaptchaGenerator> removeImageCaptchaGeneratorProvider(String key) {
|
||||
return imageCaptchaGeneratorProviderMap.remove(key);
|
||||
public ImageCaptchaGeneratorProvider removeImageCaptchaGeneratorProvider(String type) {
|
||||
return imageCaptchaGeneratorProviderMap.remove(type);
|
||||
}
|
||||
|
||||
public BiFunction<String, MultiImageCaptchaGenerator, ImageCaptchaGenerator> 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<String, MultiImageCaptchaGenerator, ImageCaptchaGenerator> 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;
|
||||
}
|
||||
|
||||
+4
-6
@@ -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<InputStream> inputStreams = new LinkedList<>();
|
||||
try {
|
||||
|
||||
+5
-8
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -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<String, Resource> templateImages = imageCaptchaResourceManager.randomGetTemplate(param.getType());
|
||||
if (templateImages == null || templateImages.isEmpty()) {
|
||||
|
||||
+4
-5
@@ -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<String, Resource> templateImages = imageCaptchaResourceManager.randomGetTemplate(param.getType());
|
||||
if (templateImages == null || templateImages.isEmpty()) {
|
||||
|
||||
+23
@@ -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;
|
||||
}
|
||||
}
|
||||
+19
@@ -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;
|
||||
}
|
||||
}
|
||||
+24
@@ -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;
|
||||
}
|
||||
}
|
||||
+24
@@ -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.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")
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user