From 7c6fec6ea38f9272d942b1ad8ad58c03ad7de2c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A9=E7=88=B1=E6=9C=89=E6=83=85?= Date: Wed, 11 May 2022 15:03:50 +0800 Subject: [PATCH] =?UTF-8?q?U=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractImageCaptchaGenerator.java | 48 ++++++++++++++- .../generator/ImageCaptchaGenerator.java | 6 +- .../AbstractClickImageCaptchaGenerator.java | 14 +++-- .../impl/MultiImageCaptchaGenerator.java | 55 +++++++++++------ .../StandardConcatImageCaptchaGenerator.java | 13 ++-- ...dRandomWordClickImageCaptchaGenerator.java | 61 ++++++++++--------- .../StandardRotateImageCaptchaGenerator.java | 24 ++------ .../StandardSliderImageCaptchaGenerator.java | 19 ++---- 8 files changed, 148 insertions(+), 92 deletions(-) diff --git a/src/main/java/cloud/tianai/captcha/generator/AbstractImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/AbstractImageCaptchaGenerator.java index ad8ab44..f8defc3 100644 --- a/src/main/java/cloud/tianai/captcha/generator/AbstractImageCaptchaGenerator.java +++ b/src/main/java/cloud/tianai/captcha/generator/AbstractImageCaptchaGenerator.java @@ -4,6 +4,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.common.util.ImgWriter; +import cloud.tianai.captcha.resource.ImageCaptchaResourceManager; import cloud.tianai.captcha.resource.common.model.dto.Resource; import lombok.Getter; import lombok.Setter; @@ -36,6 +37,41 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener /** 默认滑块图片类型. */ public String defaultSliderImageType = DEFAULT_SLIDER_IMAGE_TYPE; + @Getter + @Setter + /** 资源管理器. */ + protected ImageCaptchaResourceManager imageCaptchaResourceManager; + /** 初始化默认资源. */ + @Getter + @Setter + protected boolean initDefaultResource = false; + + @Getter + private boolean init = false; + + public AbstractImageCaptchaGenerator() { + } + + @Override + public ImageCaptchaGenerator init() { + if (init) { + return this; + } + try { + doInit(); + } catch (Exception e) { + log.error("[{}]初始化失败,ex", this.getClass().getSimpleName(), e); + throw e; + } + init = true; + return this; + } + + public AbstractImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) { + this.imageCaptchaResourceManager = imageCaptchaResourceManager; + this.initDefaultResource = initDefaultResource; + } + @Override public ImageCaptchaInfo generateCaptchaImage(String type) { return generateCaptchaImage(type, defaultBgImageType, defaultSliderImageType); @@ -70,7 +106,7 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener if (CaptchaImageUtils.isPng(formatType) || CaptchaImageUtils.isJpeg(formatType)) { // 如果是 jpg 或者 png图片的话 用hutool的生成 ImgWriter.write(bufferedImage, formatType, byteArrayOutputStream, -1); - }else { + } else { ImageIO.write(bufferedImage, formatType, byteArrayOutputStream); } //转换成字节码 @@ -104,4 +140,14 @@ public abstract class AbstractImageCaptchaGenerator implements ImageCaptchaGener return getImageResourceManager().getResourceInputStream(resource); } + + /** + * 初始化 + */ + protected abstract void doInit(); + + @Override + public ImageCaptchaResourceManager getImageResourceManager() { + return imageCaptchaResourceManager; + } } diff --git a/src/main/java/cloud/tianai/captcha/generator/ImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/ImageCaptchaGenerator.java index 64d7002..44d96a4 100644 --- a/src/main/java/cloud/tianai/captcha/generator/ImageCaptchaGenerator.java +++ b/src/main/java/cloud/tianai/captcha/generator/ImageCaptchaGenerator.java @@ -1,6 +1,5 @@ package cloud.tianai.captcha.generator; -import cloud.tianai.captcha.common.constant.CaptchaTypeConstant; 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; @@ -14,6 +13,11 @@ import cloud.tianai.captcha.resource.ImageCaptchaResourceManager; public interface ImageCaptchaGenerator { + /** + * 初始化 + */ + ImageCaptchaGenerator init(); + /** * 生成验证码图片 * diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/AbstractClickImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/AbstractClickImageCaptchaGenerator.java index ec0ae64..cc2700a 100644 --- a/src/main/java/cloud/tianai/captcha/generator/impl/AbstractClickImageCaptchaGenerator.java +++ b/src/main/java/cloud/tianai/captcha/generator/impl/AbstractClickImageCaptchaGenerator.java @@ -1,12 +1,11 @@ package cloud.tianai.captcha.generator.impl; -import cloud.tianai.captcha.generator.common.model.dto.ClickImageCheckDefinition; -import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils; import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator; import cloud.tianai.captcha.generator.common.model.dto.ClickImageCheckDefinition; 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.common.model.dto.Resource; import lombok.*; @@ -16,8 +15,6 @@ import java.io.InputStream; import java.util.*; import java.util.concurrent.ThreadLocalRandom; -import static cloud.tianai.captcha.generator.common.util.CaptchaImageUtils.wrapFile2BufferedImage; - /** * @Author: 天爱有情 * @date 2022/4/27 11:46 @@ -34,6 +31,14 @@ public abstract class AbstractClickImageCaptchaGenerator extends AbstractImageCa @Setter protected Integer interferenceCount = 2; + + public AbstractClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) { + super(imageCaptchaResourceManager, initDefaultResource); + } + + public AbstractClickImageCaptchaGenerator() { + } + @SneakyThrows @Override public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) { @@ -97,7 +102,6 @@ public abstract class AbstractClickImageCaptchaGenerator extends AbstractImageCa } } - /** * 随机获取点击的图片 * diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/MultiImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/MultiImageCaptchaGenerator.java index 9d5be8a..679ec08 100644 --- a/src/main/java/cloud/tianai/captcha/generator/impl/MultiImageCaptchaGenerator.java +++ b/src/main/java/cloud/tianai/captcha/generator/impl/MultiImageCaptchaGenerator.java @@ -7,9 +7,12 @@ import cloud.tianai.captcha.generator.ImageCaptchaGenerator; import cloud.tianai.captcha.generator.common.model.dto.GenerateParam; import cloud.tianai.captcha.generator.common.model.dto.ImageCaptchaInfo; 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: 天爱有情 @@ -19,27 +22,42 @@ import java.util.Map; public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator { private Map imageCaptchaGeneratorMap = new HashMap<>(4); + private Map> imageCaptchaGeneratorProviderMap = new HashMap<>(4); - private ImageCaptchaResourceManager imageCaptchaResourceManager; - private boolean initDefaultResource; - + @Setter + @Getter private String defaultCaptcha = CaptchaTypeConstant.SLIDER; public MultiImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) { - this.imageCaptchaResourceManager = imageCaptchaResourceManager; - this.initDefaultResource = initDefaultResource; - init(); + super(imageCaptchaResourceManager, initDefaultResource); } - protected void init() { + @Override + protected void doInit() { // 滑块验证码 - addImageCaptchaGenerator(CaptchaTypeConstant.SLIDER, new StandardSliderImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource)); + addImageCaptchaGeneratorProvider(CaptchaTypeConstant.SLIDER, (type, context) -> + new StandardSliderImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init()); // 旋转验证码 - addImageCaptchaGenerator(CaptchaTypeConstant.ROTATE, new StandardRotateImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource)); + addImageCaptchaGeneratorProvider(CaptchaTypeConstant.ROTATE, (type, context) -> + new StandardRotateImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init()); // 拼接验证码 - addImageCaptchaGenerator(CaptchaTypeConstant.CONCAT, new StandardConcatImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource)); + addImageCaptchaGeneratorProvider(CaptchaTypeConstant.CONCAT, (type, context) -> + new StandardConcatImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init()); // 点选文字验证码 - addImageCaptchaGenerator(CaptchaTypeConstant.WORD_IMAGE_CLICK, new StandardRandomWordClickImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource)); + addImageCaptchaGeneratorProvider(CaptchaTypeConstant.WORD_IMAGE_CLICK, (type, context) -> + new StandardRandomWordClickImageCaptchaGenerator(imageCaptchaResourceManager, initDefaultResource).init()); + } + + public void addImageCaptchaGeneratorProvider(String key, BiFunction provider) { + imageCaptchaGeneratorProviderMap.put(key, provider); + } + + public BiFunction removeImageCaptchaGeneratorProvider(String key) { + return imageCaptchaGeneratorProviderMap.remove(key); + } + + public BiFunction getImageCaptchaGeneratorProvider(String key) { + return imageCaptchaGeneratorProviderMap.get(key); } public void addImageCaptchaGenerator(String key, ImageCaptchaGenerator captchaGenerator) { @@ -50,6 +68,10 @@ public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator { return imageCaptchaGeneratorMap.remove(key); } + public ImageCaptchaGenerator getImageCaptchaGenerator(String key) { + return imageCaptchaGeneratorMap.get(key); + } + @Override public ImageCaptchaInfo generateCaptchaImage(GenerateParam param) { String type = param.getType(); @@ -59,14 +81,13 @@ public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator { } ImageCaptchaGenerator imageCaptchaGenerator = imageCaptchaGeneratorMap.get(type); if (imageCaptchaGenerator == null) { - throw new IllegalArgumentException("生成验证码失败,错误的type类型:" + type); + BiFunction provider = imageCaptchaGeneratorProviderMap.get(type); + if (provider == null) { + throw new IllegalArgumentException("生成验证码失败,错误的type类型:" + type); + } + imageCaptchaGenerator = imageCaptchaGeneratorMap.computeIfAbsent(type, k -> provider.apply(k, this)); } return imageCaptchaGenerator.generateCaptchaImage(param); } - - @Override - public ImageCaptchaResourceManager getImageResourceManager() { - return imageCaptchaResourceManager; - } } diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/StandardConcatImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/StandardConcatImageCaptchaGenerator.java index 6cbbad7..be4d4ec 100644 --- a/src/main/java/cloud/tianai/captcha/generator/impl/StandardConcatImageCaptchaGenerator.java +++ b/src/main/java/cloud/tianai/captcha/generator/impl/StandardConcatImageCaptchaGenerator.java @@ -30,7 +30,11 @@ public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGen protected ImageCaptchaResourceManager imageCaptchaResourceManager; public StandardConcatImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) { - this.imageCaptchaResourceManager = imageCaptchaResourceManager; + super(imageCaptchaResourceManager, initDefaultResource); + } + + @Override + protected void doInit() { if (initDefaultResource) { initDefaultResource(); } @@ -63,7 +67,7 @@ public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGen + bgImageTopSplit[1].getWidth(), bgImageTopSplit[0].getHeight(), bgImageTopSplit[1], bgImageTopSplit[0]); bgImage = concatImage(false, bgImageSplit[1].getWidth(), sliderImage.getHeight() + bgImageSplit[1].getHeight(), sliderImage, bgImageSplit[1]); - return wrapConcatCaptchaInfo(randomX, randomY,bgImage, param); + return wrapConcatCaptchaInfo(randomX, randomY, bgImage, param); } finally { // 使用完后关闭流 for (InputStream inputStream : inputStreams) { @@ -91,9 +95,4 @@ public class StandardConcatImageCaptchaGenerator extends AbstractImageCaptchaGen imageCaptchaInfo.setTolerant(0.05F); return imageCaptchaInfo; } - - @Override - public ImageCaptchaResourceManager getImageResourceManager() { - return imageCaptchaResourceManager; - } } diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/StandardRandomWordClickImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/StandardRandomWordClickImageCaptchaGenerator.java index 6b03b8f..feaca56 100644 --- a/src/main/java/cloud/tianai/captcha/generator/impl/StandardRandomWordClickImageCaptchaGenerator.java +++ b/src/main/java/cloud/tianai/captcha/generator/impl/StandardRandomWordClickImageCaptchaGenerator.java @@ -1,9 +1,5 @@ package cloud.tianai.captcha.generator.impl; -import cloud.tianai.captcha.common.constant.CaptchaTypeConstant; -import cloud.tianai.captcha.common.util.FontUtils; -import cloud.tianai.captcha.generator.common.model.dto.ClickImageCheckDefinition; -import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils; import cloud.tianai.captcha.common.constant.CaptchaTypeConstant; import cloud.tianai.captcha.common.util.FontUtils; import cloud.tianai.captcha.generator.common.model.dto.ClickImageCheckDefinition; @@ -14,66 +10,78 @@ 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.impl.provider.ClassPathResourceProvider; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; import lombok.SneakyThrows; import sun.font.FontDesignMetrics; import java.awt.*; import java.awt.image.BufferedImage; +import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.concurrent.ThreadLocalRandom; import java.util.stream.Collectors; -import static cloud.tianai.captcha.generator.impl.StandardSliderImageCaptchaGenerator.DEFAULT_SLIDER_IMAGE_RESOURCE_PATH; - /** * @Author: 天爱有情 * @date 2022/4/27 11:46 * @Description 点选验证码 */ -@Data public class StandardRandomWordClickImageCaptchaGenerator extends AbstractClickImageCaptchaGenerator { - protected ImageCaptchaResourceManager imageCaptchaResourceManager; /** 字体包. */ + @Getter + @Setter protected Font font; + @Getter + @Setter protected FontDesignMetrics metrics; + @Getter + @Setter protected Integer clickImgWidth = 80; + @Getter + @Setter protected Integer clickImgHeight = 80; + @Getter + @Setter protected int tipImageInterferenceLineNum = 2; + @Getter + @Setter protected int tipImageInterferencePointNum = 5; @SneakyThrows public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) { + super(imageCaptchaResourceManager, initDefaultResource); this.imageCaptchaResourceManager = imageCaptchaResourceManager; + + } + + @Override + @SneakyThrows({IOException.class, FontFormatException.class}) + protected void doInit() { + if (this.font == null) { + // 使用默认字体 + Resource fontResource = new Resource(null, "META-INF/fonts/SIMSUN.TTC"); + InputStream inputStream = new ClassPathResourceProvider().doGetResourceInputStream(fontResource); + Font font = Font.createFont(Font.TRUETYPE_FONT, inputStream); + this.font = font.deriveFont(Font.BOLD, 70); + } + this.metrics = FontDesignMetrics.getMetrics(font); if (initDefaultResource) { initDefaultResource(); } - // 使用默认字体 - Resource fontResource = new Resource(null, "META-INF/fonts/SIMSUN.TTC"); - InputStream inputStream = new ClassPathResourceProvider().doGetResourceInputStream(fontResource); - Font font = Font.createFont(Font.TRUETYPE_FONT, inputStream); - font = font.deriveFont(Font.BOLD, 70); - this.metrics = FontDesignMetrics.getMetrics(font); - this.font = font; - setClickImgHeight(clickImgWidth); - setClickImgWidth(clickImgHeight); } public StandardRandomWordClickImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource, Font font) { + super(imageCaptchaResourceManager, initDefaultResource); this.imageCaptchaResourceManager = imageCaptchaResourceManager; this.font = font; - this.metrics = FontDesignMetrics.getMetrics(font); - setClickImgWidth(font.getSize() + 10); - setClickImgHeight(font.getSize() + 10); - if (initDefaultResource) { - initDefaultResource(); - } } + public void initDefaultResource() { ResourceStore resourceStore = imageCaptchaResourceManager.getResourceStore(); // 添加一些系统的资源文件 @@ -132,9 +140,4 @@ public class StandardRandomWordClickImageCaptchaGenerator extends AbstractClickI return clickImageCaptchaInfo; } - @Override - public ImageCaptchaResourceManager getImageResourceManager() { - return imageCaptchaResourceManager; - } - } diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/StandardRotateImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/StandardRotateImageCaptchaGenerator.java index 4572633..3fb3a8f 100644 --- a/src/main/java/cloud/tianai/captcha/generator/impl/StandardRotateImageCaptchaGenerator.java +++ b/src/main/java/cloud/tianai/captcha/generator/impl/StandardRotateImageCaptchaGenerator.java @@ -11,16 +11,6 @@ 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.impl.provider.ClassPathResourceProvider; -import cloud.tianai.captcha.common.constant.CaptchaTypeConstant; -import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator; -import cloud.tianai.captcha.generator.common.constant.SliderCaptchaConstant; -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.RotateImageCaptchaInfo; -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.impl.provider.ClassPathResourceProvider; import lombok.SneakyThrows; import java.awt.image.BufferedImage; @@ -32,10 +22,6 @@ import java.util.LinkedList; import java.util.Map; import java.util.concurrent.ThreadLocalRandom; -import static cloud.tianai.captcha.generator.common.util.CaptchaImageUtils.*; -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; - /** * @Author: 天爱有情 * @date 2022/4/22 16:43 @@ -46,7 +32,12 @@ public class StandardRotateImageCaptchaGenerator extends AbstractImageCaptchaGen protected final ImageCaptchaResourceManager imageCaptchaResourceManager; public StandardRotateImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) { + super(imageCaptchaResourceManager, initDefaultResource); this.imageCaptchaResourceManager = imageCaptchaResourceManager; + } + + @Override + protected void doInit() { if (initDefaultResource) { initDefaultResource(); } @@ -133,9 +124,4 @@ public class StandardRotateImageCaptchaGenerator extends AbstractImageCaptchaGen ); } - @Override - public ImageCaptchaResourceManager getImageResourceManager() { - return imageCaptchaResourceManager; - } - } diff --git a/src/main/java/cloud/tianai/captcha/generator/impl/StandardSliderImageCaptchaGenerator.java b/src/main/java/cloud/tianai/captcha/generator/impl/StandardSliderImageCaptchaGenerator.java index a881c67..35e77ac 100644 --- a/src/main/java/cloud/tianai/captcha/generator/impl/StandardSliderImageCaptchaGenerator.java +++ b/src/main/java/cloud/tianai/captcha/generator/impl/StandardSliderImageCaptchaGenerator.java @@ -1,13 +1,12 @@ package cloud.tianai.captcha.generator.impl; -import cloud.tianai.captcha.common.constant.CaptchaTypeConstant; -import cloud.tianai.captcha.generator.common.util.CaptchaImageUtils; import cloud.tianai.captcha.common.constant.CaptchaTypeConstant; import cloud.tianai.captcha.generator.AbstractImageCaptchaGenerator; import cloud.tianai.captcha.generator.common.constant.SliderCaptchaConstant; 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.SliderImageCaptchaInfo; +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; @@ -24,8 +23,6 @@ import java.util.LinkedList; import java.util.Map; import java.util.concurrent.ThreadLocalRandom; -import static cloud.tianai.captcha.generator.common.util.CaptchaImageUtils.*; - /** * @Author: 天爱有情 * @Date 2020/5/29 8:06 @@ -43,12 +40,13 @@ public class StandardSliderImageCaptchaGenerator extends AbstractImageCaptchaGen */ public static final String DEFAULT_SLIDER_IMAGE_TEMPLATE_PATH = "META-INF/cut-image/template"; - protected final ImageCaptchaResourceManager imageCaptchaResourceManager; - - public StandardSliderImageCaptchaGenerator(ImageCaptchaResourceManager imageCaptchaResourceManager, boolean initDefaultResource) { - this.imageCaptchaResourceManager = imageCaptchaResourceManager; + super(imageCaptchaResourceManager, initDefaultResource); + } + + @Override + protected void doInit() { if (initDefaultResource) { initDefaultResource(); } @@ -140,11 +138,6 @@ public class StandardSliderImageCaptchaGenerator extends AbstractImageCaptchaGen ); } - @Override - public ImageCaptchaResourceManager getImageResourceManager() { - return imageCaptchaResourceManager; - } - protected int randomObfuscateX(int sliderX, int slWidth, int bgWidth) { if (bgWidth / 2 > (sliderX + (slWidth / 2))) { // 右边混淆