1.5.0重构;

修复一大堆已知问题,
优化代码,
增加 application 类,
重构拦截器组件,
添加缓存模块,
This commit is contained in:
天爱有情
2024-07-12 14:54:25 +08:00
parent db2f409783
commit 2cfb72349d
42 changed files with 2311 additions and 192 deletions
@@ -8,6 +8,7 @@ import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
import cloud.tianai.captcha.generator.impl.transform.Base64ImageTransform;
import cloud.tianai.captcha.interceptor.CaptchaInterceptor;
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
import cloud.tianai.captcha.resource.common.model.dto.Resource;
import cloud.tianai.captcha.resource.common.model.dto.ResourceMap;
@@ -23,8 +24,6 @@ import java.util.Collection;
import java.util.Optional;
import java.util.concurrent.ThreadLocalRandom;
import static cloud.tianai.captcha.generator.impl.StaticCaptchaPostProcessorManager.*;
/**
* @Author: 天爱有情
* @date 2022/4/22 16:30
@@ -50,6 +49,8 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
/** 图片转换器. */
protected ImageTransform imageTransform;
protected CaptchaInterceptor interceptor;
@Getter
private boolean init = false;
@@ -102,17 +103,36 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
assertInit();
CustomData data = new CustomData();
CaptchaExchange captchaExchange = CaptchaExchange.create(data, param);
ImageCaptchaInfo imageCaptchaInfo = applyPostProcessorBeforeGenerate(captchaExchange, this);
ImageCaptchaInfo imageCaptchaInfo = beforeGenerate(captchaExchange);
if (imageCaptchaInfo != null) {
return imageCaptchaInfo;
}
doGenerateCaptchaImage(captchaExchange);
applyPostProcessorBeforeWrapImageCaptchaInfo(captchaExchange, this);
beforeWrapImageCaptchaInfo(captchaExchange);
imageCaptchaInfo = wrapImageCaptchaInfo(captchaExchange);
applyPostProcessorAfterGenerateCaptchaImage(captchaExchange, imageCaptchaInfo, this);
afterGenerateCaptchaImage(captchaExchange, imageCaptchaInfo);
return imageCaptchaInfo;
}
protected void afterGenerateCaptchaImage(CaptchaExchange captchaExchange, ImageCaptchaInfo imageCaptchaInfo) {
if (interceptor != null) {
interceptor.afterGenerateCaptchaImage(interceptor.createContext(), captchaExchange, imageCaptchaInfo, this);
}
}
protected void beforeWrapImageCaptchaInfo(CaptchaExchange captchaExchange) {
if (interceptor != null) {
interceptor.beforeWrapImageCaptchaInfo(interceptor.createContext(), captchaExchange, this);
}
}
protected ImageCaptchaInfo beforeGenerate(CaptchaExchange captchaExchange) {
if (interceptor != null) {
return interceptor.beforeGenerateCaptchaImage(interceptor.createContext(), captchaExchange, this);
}
return null;
}
public ImageCaptchaInfo wrapImageCaptchaInfo(CaptchaExchange captchaExchange) {
ImageCaptchaInfo imageCaptchaInfo = doWrapImageCaptchaInfo(captchaExchange);
imageCaptchaInfo.setData(captchaExchange.getCustomData());
@@ -250,4 +270,14 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener
public void setImageTransform(ImageTransform imageTransform) {
this.imageTransform = imageTransform;
}
@Override
public CaptchaInterceptor getInterceptor() {
return interceptor;
}
@Override
public void setInterceptor(CaptchaInterceptor interceptor) {
this.interceptor = interceptor;
}
}
@@ -3,6 +3,7 @@ package cloud.tianai.captcha.generator;
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
import cloud.tianai.captcha.interceptor.CaptchaInterceptor;
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
/**
@@ -78,4 +79,9 @@ public interface ImageCaptchaGenerator {
*/
void setImageTransform(ImageTransform imageTransform);
CaptchaInterceptor getInterceptor();
void setInterceptor(CaptchaInterceptor interceptor);
}
@@ -1,6 +1,7 @@
package cloud.tianai.captcha.generator;
import cloud.tianai.captcha.interceptor.CaptchaInterceptor;
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
/**
@@ -17,7 +18,7 @@ public interface ImageCaptchaGeneratorProvider {
* @param imageTransform imageTransform
* @return ImageCaptchaGenerator
*/
ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager, ImageTransform imageTransform);
ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager, ImageTransform imageTransform, CaptchaInterceptor interceptor);
/**
* 验证码类型
@@ -1,10 +1,8 @@
package cloud.tianai.captcha.generator.common.model.dto;
import cloud.tianai.captcha.common.AnyMap;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: 天爱有情
* @date 2023/4/24 10:27
@@ -14,9 +12,9 @@ import java.util.Map;
public class CustomData {
/** 透传字段,用于传给前端. */
private Map<String, Object> viewData;
private AnyMap viewData;
/** 内部使用的字段数据. */
private Map<String, Object> data;
private AnyMap data;
/**
* 扩展字段
*/
@@ -24,14 +22,14 @@ public class CustomData {
public void putViewData(String key, Object data) {
if (this.viewData == null) {
this.viewData = new HashMap<>();
this.viewData = new AnyMap();
}
this.viewData.put(key, data);
}
public void putData(String key, Object data) {
if (this.data == null) {
this.data = new HashMap<>();
this.data = new AnyMap();
}
this.data.put(key, data);
}
@@ -1,11 +1,9 @@
package cloud.tianai.captcha.generator.common.model.dto;
import cloud.tianai.captcha.common.AnyMap;
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
import lombok.*;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: 天爱有情
* @date 2022/2/11 9:44
@@ -32,7 +30,7 @@ public class GenerateParam {
/** 滑动图片标签,用户二级过滤模板图片,或指定某模板图片.. */
private String templateImageTag;
/** 扩展参数. */
private Map<String, Object> param = new HashMap<>(4);
private AnyMap param = new AnyMap();
public void addParam(String key, Object value) {
doGetOrCreateParam().put(key, value);
@@ -42,9 +40,9 @@ public class GenerateParam {
return param == null ? null : param.get(key);
}
private Map<String, Object> doGetOrCreateParam() {
private AnyMap doGetOrCreateParam() {
if (param == null) {
param = new HashMap<>(4);
param = new AnyMap();
}
return param;
}
@@ -5,6 +5,7 @@ import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
import cloud.tianai.captcha.generator.ImageTransform;
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
import cloud.tianai.captcha.interceptor.CaptchaInterceptor;
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
import lombok.Getter;
import lombok.Setter;
@@ -198,4 +199,14 @@ public class CacheImageCaptchaGenerator implements ImageCaptchaGenerator {
public void setImageTransform(ImageTransform imageTransform) {
target.setImageTransform(imageTransform);
}
@Override
public CaptchaInterceptor getInterceptor() {
return target.getInterceptor();
}
@Override
public void setInterceptor(CaptchaInterceptor interceptor) {
target.setInterceptor(interceptor);
}
}
@@ -110,7 +110,7 @@ public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
if (provider == null) {
throw new IllegalArgumentException("生成验证码失败,错误的type类型:" + t);
}
return provider.get(getImageResourceManager(), getImageTransform()).init(initDefaultResource);
return provider.get(getImageResourceManager(), getImageTransform(), getInterceptor()).init(initDefaultResource);
});
return imageCaptchaGenerator;
}
@@ -0,0 +1,167 @@
package cloud.tianai.captcha.generator.impl;
import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
import cloud.tianai.captcha.generator.ImageTransform;
import cloud.tianai.captcha.generator.common.model.dto.CaptchaExchange;
import cloud.tianai.captcha.generator.common.model.dto.GenerateParam;
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
import cloud.tianai.captcha.resource.ResourceStore;
import cloud.tianai.captcha.resource.common.model.dto.Resource;
import cloud.tianai.captcha.resource.common.model.dto.ResourceMap;
import cloud.tianai.captcha.resource.impl.provider.ClassPathResourceProvider;
import lombok.SneakyThrows;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.util.UUID;
import static cloud.tianai.captcha.common.constant.CommonConstant.*;
public class SliderImageCaptchaV2Generator extends AbstractImageCaptchaGenerator {
/** 模板滑块固定名称. */
public static String TEMPLATE_ACTIVE_IMAGE_NAME = "active.png";
/** 模板凹槽固定名称. */
public static String TEMPLATE_FIXED_IMAGE_NAME = "fixed.png";
/** 模板蒙版. */
public static String TEMPLATE_MASK_IMAGE_NAME = "mask.png";
public SliderImageCaptchaV2Generator(ImageCaptchaResourceManager imageCaptchaResourceManager) {
super(imageCaptchaResourceManager);
}
public SliderImageCaptchaV2Generator(ImageCaptchaResourceManager imageCaptchaResourceManager, ImageTransform imageTransform) {
super(imageCaptchaResourceManager);
setImageTransform(imageTransform);
}
@Override
protected void doInit(boolean initDefaultResource) {
if (initDefaultResource) {
initDefaultResource();
}
}
@Override
@SneakyThrows
protected void doGenerateCaptchaImage(CaptchaExchange captchaExchange) {
GenerateParam param = captchaExchange.getParam();
ResourceMap templateResource = requiredRandomGetTemplate(param.getType(), param.getTemplateImageTag());
Resource resourceImage = requiredRandomGetResource(param.getType(), param.getBackgroundImageTag());
BufferedImage background = getResourceImage(resourceImage);
BufferedImage fixedTemplate = getTemplateImage(templateResource, TEMPLATE_FIXED_IMAGE_NAME);
BufferedImage activeTemplate = getTemplateImage(templateResource, TEMPLATE_ACTIVE_IMAGE_NAME);
int randomX = randomInt(fixedTemplate.getWidth() + 5, background.getWidth() - background.getHeight() - 10);
int randomY = randomInt(background.getHeight() - fixedTemplate.getHeight());
// 随机角度
// double randomDegree = randomDouble(10, 80);
// double randomDegree2 = randomDouble(10, 80);
int randomObfuscateX = randomObfuscateX(randomX, fixedTemplate.getWidth(), background.getWidth() - background.getHeight() - 10);
int randomObfuscateY = randomInt(background.getHeight() - fixedTemplate.getHeight());
double rotatePosRight = background.getHeight();
BufferedImage cutImage = CaptchaImageUtils.cutImage(background, fixedTemplate, randomX, randomY);
// 正确的图
Graphics2D backgroundGraphics = background.createGraphics();
// backgroundGraphics.rotate(Math.toRadians(randomDegree), randomX + fixedTemplate.getWidth(), rotatePosRight);
backgroundGraphics.drawImage(fixedTemplate, randomX, randomY, null);
// backgroundGraphics.rotate(Math.toRadians(-randomDegree + randomDegree2), randomX + fixedTemplate.getWidth(), rotatePosRight);
// 干扰图
backgroundGraphics.drawImage(fixedTemplate, randomObfuscateX, randomObfuscateY, null);
backgroundGraphics.dispose();
CaptchaImageUtils.overlayImage(cutImage, activeTemplate, 0, 0);
BufferedImage matrixTemplate = CaptchaImageUtils.createTransparentImage(activeTemplate.getWidth(), background.getHeight());
CaptchaImageUtils.overlayImage(matrixTemplate, cutImage, 0, randomY);
FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Thinkpad\\Desktop\\captcha\\temp\\1\\test-bg" + UUID.randomUUID().toString()
+ ".jpg");
ImageIO.write(background, "jpg", fileOutputStream);
fileOutputStream.close();
// FileOutputStream fileOutputStream2 = new FileOutputStream("C:\\Users\\Thinkpad\\Desktop\\captcha\\temp\\test-slider.png");
// ImageIO.write(matrixTemplate, "png", fileOutputStream2);
// fileOutputStream2.close();
System.out.println("randomX=" + randomX);
System.out.println("randomY=" + randomY);
// System.out.println("randomDegree=" + randomDegree);
System.out.println("randomObfuscateX=" + randomObfuscateX);
System.out.println("randomObfuscateY=" + randomY);
// CaptchaImageUtils.overlayImage(background, fixedTemplate, randomX, randomY);
//
// BufferedImage matrixTemplate = CaptchaImageUtils.createTransparentImage(activeTemplate.getWidth(), background.getHeight());
}
protected double randomDegree(double hypotenuse, double adjacent) {
if (hypotenuse <= adjacent) {
return 90.0;
}
// 使用勾股定理计算对边的长度
double opposite = Math.sqrt(hypotenuse * hypotenuse - adjacent * adjacent);
// 使用Math.atan2计算角度(以弧度为单位)
double angleInRadians = Math.atan2(opposite, adjacent);
// 将弧度转换为度
double angleInDegrees = Math.toDegrees(angleInRadians);
return angleInDegrees;
}
protected int randomObfuscateX(int sliderX, int slWidth, int bgWidth) {
if (bgWidth / 2 > (sliderX + (slWidth / 2))) {
// 右边混淆
return randomInt(sliderX + 10, bgWidth - slWidth);
}
// 左边混淆
return randomInt(10, sliderX - slWidth);
}
@Override
protected ImageCaptchaInfo doWrapImageCaptchaInfo(CaptchaExchange captchaExchange) {
return null;
}
/**
* 初始化默认资源
*/
public void initDefaultResource() {
ResourceStore resourceStore = imageCaptchaResourceManager.getResourceStore();
// 添加一些系统的资源文件
resourceStore.addResource(CaptchaTypeConstant.SLIDER, new Resource(ClassPathResourceProvider.NAME, DEFAULT_SLIDER_IMAGE_RESOURCE_PATH.concat("/1.jpg"), DEFAULT_TAG));
// 添加一些系统的 模板文件
ResourceMap template1 = new ResourceMap(DEFAULT_TAG, 4);
template1.put(TEMPLATE_ACTIVE_IMAGE_NAME, new Resource(ClassPathResourceProvider.NAME, DEFAULT_SLIDER_IMAGE_TEMPLATE_PATH.concat("/1/active.png")));
template1.put(TEMPLATE_FIXED_IMAGE_NAME, new Resource(ClassPathResourceProvider.NAME, DEFAULT_SLIDER_IMAGE_TEMPLATE_PATH.concat("/1/fixed.png")));
resourceStore.addTemplate(CaptchaTypeConstant.SLIDER, template1);
ResourceMap template2 = new ResourceMap(DEFAULT_TAG, 4);
template2.put(TEMPLATE_ACTIVE_IMAGE_NAME, new Resource(ClassPathResourceProvider.NAME, DEFAULT_SLIDER_IMAGE_TEMPLATE_PATH.concat("/2/active.png")));
template2.put(TEMPLATE_FIXED_IMAGE_NAME, new Resource(ClassPathResourceProvider.NAME, DEFAULT_SLIDER_IMAGE_TEMPLATE_PATH.concat("/2/fixed.png")));
resourceStore.addTemplate(CaptchaTypeConstant.SLIDER, template2);
}
}
@@ -4,6 +4,7 @@ import cloud.tianai.captcha.common.constant.CaptchaTypeConstant;
import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
import cloud.tianai.captcha.generator.ImageTransform;
import cloud.tianai.captcha.generator.common.model.dto.*;
import cloud.tianai.captcha.interceptor.CaptchaInterceptor;
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
import cloud.tianai.captcha.resource.ResourceStore;
import cloud.tianai.captcha.resource.common.model.dto.Resource;
@@ -33,6 +34,12 @@ public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGen
setImageTransform(imageTransform);
}
public StandardConcatImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, ImageTransform imageTransform, CaptchaInterceptor interceptor) {
super(imageCaptchaResourceManager);
setImageTransform(imageTransform);
setInterceptor(interceptor);
}
@Override
protected void doInit(boolean initDefaultResource) {
if (initDefaultResource) {
@@ -6,6 +6,7 @@ import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
import cloud.tianai.captcha.generator.ImageTransform;
import cloud.tianai.captcha.generator.common.model.dto.*;
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
import cloud.tianai.captcha.interceptor.CaptchaInterceptor;
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
import cloud.tianai.captcha.resource.ResourceStore;
import cloud.tianai.captcha.resource.common.model.dto.Resource;
@@ -41,6 +42,11 @@ public class StandardRotateImageCaptchaGenerator extends AbstractImageCaptchaGen
setImageTransform(imageTransform);
}
public StandardRotateImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, ImageTransform imageTransform, CaptchaInterceptor interceptor) {
super(imageCaptchaResourceManager);
setImageTransform(imageTransform);
setInterceptor(interceptor);
}
@Override
protected void doInit(boolean initDefaultResource) {
if (initDefaultResource) {
@@ -5,6 +5,7 @@ import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator;
import cloud.tianai.captcha.generator.ImageTransform;
import cloud.tianai.captcha.generator.common.model.dto.*;
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
import cloud.tianai.captcha.interceptor.CaptchaInterceptor;
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
import cloud.tianai.captcha.resource.ResourceStore;
import cloud.tianai.captcha.resource.common.model.dto.Resource;
@@ -48,6 +49,13 @@ public class StandardSliderImageCaptchaGenerator extends AbstractImageCaptchaGen
setImageTransform(imageTransform);
}
public StandardSliderImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, ImageTransform imageTransform, CaptchaInterceptor interceptor) {
super(imageCaptchaResourceManager);
setImageTransform(imageTransform);
setInterceptor(interceptor);
}
@Override
protected void doInit(boolean initDefaultResource) {
if (initDefaultResource) {
@@ -7,6 +7,7 @@ import cloud.tianai.captcha.generator.ImageTransform;
import cloud.tianai.captcha.generator.common.FontWrapper;
import cloud.tianai.captcha.generator.common.model.dto.*;
import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils;
import cloud.tianai.captcha.interceptor.CaptchaInterceptor;
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
import cloud.tianai.captcha.resource.ResourceStore;
import cloud.tianai.captcha.resource.common.model.dto.Resource;
@@ -78,12 +79,21 @@ public class StandardWordClickImageCaptchaGenerator extends AbstractClickImageCa
setImageTransform(imageTransform);
}
public StandardWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, ImageTransform imageTransform, List<FontWrapper> fonts) {
public StandardWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, ImageTransform imageTransform, CaptchaInterceptor interceptor) {
super(imageCaptchaResourceManager);
setImageTransform(imageTransform);
setInterceptor(interceptor);
}
public StandardWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, ImageTransform imageTransform, CaptchaInterceptor interceptor, List<FontWrapper> fonts) {
super(imageCaptchaResourceManager);
setImageTransform(imageTransform);
setInterceptor(interceptor);
this.fonts = fonts;
}
@Override
protected List<Resource> randomGetClickImgTips(GenerateParam param) {
int tipSize = interferenceCount + checkClickCount;
@@ -1,83 +1,74 @@
package cloud.tianai.captcha.generator.impl;
import cloud.tianai.captcha.common.exception.ImageCaptchaException;
import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
import cloud.tianai.captcha.generator.ImageCaptchaPostProcessor;
import cloud.tianai.captcha.generator.common.model.dto.CaptchaExchange;
import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo;
import lombok.Getter;
import java.util.LinkedList;
import java.util.List;
/**
* @Author: 天爱有情
* @date 2023/4/24 15:23
* @Description 验证码后处理器管理
*/
public class StaticCaptchaPostProcessorManager {
@Getter
private static LinkedList<ImageCaptchaPostProcessor> processors = new LinkedList<>();
public static void add(ImageCaptchaPostProcessor processor) {
processors.add(processor);
}
public static void add(Integer index, ImageCaptchaPostProcessor processor) {
processors.add(index, processor);
}
public static void addFirst(ImageCaptchaPostProcessor processor) {
processors.addFirst(processor);
}
public static void addLast(ImageCaptchaPostProcessor processor) {
processors.addLast(processor);
}
public static void clear() {
processors.clear();
}
public static void add(List<ImageCaptchaPostProcessor> addPostProcessors) {
processors.addAll(addPostProcessors);
}
public static ImageCaptchaInfo applyPostProcessorBeforeGenerate(CaptchaExchange captchaExchange, ImageCaptchaGenerator context) {
for (ImageCaptchaPostProcessor processor : processors) {
try {
ImageCaptchaInfo imageCaptchaInfo = processor.beforeGenerateCaptchaImage(captchaExchange, context);
if (imageCaptchaInfo != null) {
return imageCaptchaInfo;
}
} catch (Exception e) {
throw new ImageCaptchaException("apply ImageCaptchaPostProcessor.beforeGenerateCaptchaImage error, [" + processor.getClass() + "]", e);
}
}
return null;
}
public static void applyPostProcessorBeforeWrapImageCaptchaInfo(CaptchaExchange captchaExchange, ImageCaptchaGenerator context) {
for (ImageCaptchaPostProcessor processor : processors) {
try {
processor.beforeWrapImageCaptchaInfo(captchaExchange, context);
} catch (Exception e) {
throw new ImageCaptchaException("apply ImageCaptchaPostProcessor.beforeWrapImageCaptchaInfo error, [" + processor.getClass() + "]", e);
}
}
}
public static void applyPostProcessorAfterGenerateCaptchaImage(CaptchaExchange captchaExchange, ImageCaptchaInfo imageCaptchaInfo, ImageCaptchaGenerator context) {
for (ImageCaptchaPostProcessor processor : processors) {
try {
processor.afterGenerateCaptchaImage(captchaExchange, imageCaptchaInfo, context);
} catch (Exception e) {
throw new ImageCaptchaException("apply ImageCaptchaPostProcessor.afterGenerateCaptchaImage error, [" + processor.getClass() + "]", e);
}
}
}
}
//
///**
// * @Author: 天爱有情
// * @date 2023/4/24 15:23
// * @Description 验证码后处理器管理
// */
//public class StaticCaptchaPostProcessorManager {
//
// @Getter
// private static LinkedList<ImageCaptchaPostProcessor> processors = new LinkedList<>();
//
// public static void add(ImageCaptchaPostProcessor processor) {
// processors.add(processor);
// }
//
// public static void add(Integer index, ImageCaptchaPostProcessor processor) {
// processors.add(index, processor);
// }
//
// public static void addFirst(ImageCaptchaPostProcessor processor) {
// processors.addFirst(processor);
// }
//
// public static void addLast(ImageCaptchaPostProcessor processor) {
// processors.addLast(processor);
// }
//
// public static void clear() {
// processors.clear();
// }
//
// public static void add(List<ImageCaptchaPostProcessor> addPostProcessors) {
// processors.addAll(addPostProcessors);
// }
//
//
// public static ImageCaptchaInfo applyPostProcessorBeforeGenerate(CaptchaExchange captchaExchange, ImageCaptchaGenerator context) {
// for (ImageCaptchaPostProcessor processor : processors) {
// try {
// ImageCaptchaInfo imageCaptchaInfo = processor.beforeGenerateCaptchaImage(captchaExchange, context);
// if (imageCaptchaInfo != null) {
// return imageCaptchaInfo;
// }
// } catch (Exception e) {
// throw new ImageCaptchaException("apply ImageCaptchaPostProcessor.beforeGenerateCaptchaImage error, [" + processor.getClass() + "]", e);
// }
// }
// return null;
// }
//
// public static void applyPostProcessorBeforeWrapImageCaptchaInfo(CaptchaExchange captchaExchange, ImageCaptchaGenerator context) {
// for (ImageCaptchaPostProcessor processor : processors) {
// try {
// processor.beforeWrapImageCaptchaInfo(captchaExchange, context);
// } catch (Exception e) {
// throw new ImageCaptchaException("apply ImageCaptchaPostProcessor.beforeWrapImageCaptchaInfo error, [" + processor.getClass() + "]", e);
// }
// }
// }
//
//
// public static void applyPostProcessorAfterGenerateCaptchaImage(CaptchaExchange captchaExchange, ImageCaptchaInfo imageCaptchaInfo, ImageCaptchaGenerator context) {
// for (ImageCaptchaPostProcessor processor : processors) {
// try {
// processor.afterGenerateCaptchaImage(captchaExchange, imageCaptchaInfo, context);
// } catch (Exception e) {
// throw new ImageCaptchaException("apply ImageCaptchaPostProcessor.afterGenerateCaptchaImage error, [" + processor.getClass() + "]", e);
// }
// }
// }
//
//}
@@ -3,6 +3,7 @@ package cloud.tianai.captcha.generator.impl.provider;
import cloud.tianai.captcha.generator.ImageCaptchaGenerator;
import cloud.tianai.captcha.generator.ImageCaptchaGeneratorProvider;
import cloud.tianai.captcha.generator.ImageTransform;
import cloud.tianai.captcha.interceptor.CaptchaInterceptor;
import cloud.tianai.captcha.resource.ImageCaptchaResourceManager;
public class CommonImageCaptchaGeneratorProvider implements ImageCaptchaGeneratorProvider {
@@ -17,8 +18,8 @@ public class CommonImageCaptchaGeneratorProvider implements ImageCaptchaGenerato
}
@Override
public ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager, ImageTransform imageTransform) {
return provider.get(resourceManager, imageTransform);
public ImageCaptchaGenerator get(ImageCaptchaResourceManager resourceManager, ImageTransform imageTransform, CaptchaInterceptor interceptor) {
return provider.get(resourceManager, imageTransform,interceptor);
}
@Override