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>
|
<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();
|
||||||
|
}
|
||||||
+3
-3
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-6
@@ -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 {
|
||||||
|
|||||||
+5
-8
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -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()) {
|
||||||
|
|||||||
+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 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()) {
|
||||||
|
|||||||
+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.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);
|
||||||
|
|||||||
Reference in New Issue
Block a user