From 2fde83cdfb193a71ebf0a277bd45eb3de3404d4d Mon Sep 17 00:00:00 2001 From: liushaofeng Date: Mon, 19 Oct 2020 19:08:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E6=B2=A1=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E6=97=B6=E7=BC=93=E5=AD=98=E6=8A=A5=E9=94=99=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../slider/CacheSliderCaptchaTemplate.java | 27 ++++++++++++++----- .../slider/DefaultSliderCaptchaTemplate.java | 7 +++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/cloud/tianai/captcha/template/slider/CacheSliderCaptchaTemplate.java b/src/main/java/cloud/tianai/captcha/template/slider/CacheSliderCaptchaTemplate.java index 4f07bf5..1d93b22 100644 --- a/src/main/java/cloud/tianai/captcha/template/slider/CacheSliderCaptchaTemplate.java +++ b/src/main/java/cloud/tianai/captcha/template/slider/CacheSliderCaptchaTemplate.java @@ -34,13 +34,28 @@ public class CacheSliderCaptchaTemplate implements SliderCaptchaTemplate { queue = new LinkedList<>(); // 初始化一个队列扫描 scheduledExecutor.scheduleAtFixedRate(() -> { - while (pos.get() < this.size) { - int count = pos.incrementAndGet(); - if (count > size) { - return; + try { + while (pos.get() < this.size) { + if (pos.get() >= size) { + return; + } + SliderCaptchaInfo slideImageInfo = target.getSlideImageInfo(); + if (slideImageInfo != null) { + queue.add(slideImageInfo); + // 添加记录 + pos.incrementAndGet(); + }else { + // 休眠500毫秒 + try { + TimeUnit.MILLISECONDS.sleep(500); + } catch (InterruptedException ignored) { + } + } + } - SliderCaptchaInfo slideImageInfo = target.getSlideImageInfo(); - queue.add(slideImageInfo); + } catch (Exception e) { + // cache所有 + log.error("缓存队列扫描时出错, ex", e); } }, 0, 100, TimeUnit.MILLISECONDS); } diff --git a/src/main/java/cloud/tianai/captcha/template/slider/DefaultSliderCaptchaTemplate.java b/src/main/java/cloud/tianai/captcha/template/slider/DefaultSliderCaptchaTemplate.java index 7b8a6e7..95c5392 100644 --- a/src/main/java/cloud/tianai/captcha/template/slider/DefaultSliderCaptchaTemplate.java +++ b/src/main/java/cloud/tianai/captcha/template/slider/DefaultSliderCaptchaTemplate.java @@ -1,6 +1,7 @@ package cloud.tianai.captcha.template.slider; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import javax.imageio.ImageIO; import java.awt.*; @@ -21,6 +22,7 @@ import java.util.concurrent.atomic.AtomicBoolean; * @Date 2020/5/29 8:06 * @Description 滑块验证码模板 */ +@Slf4j public class DefaultSliderCaptchaTemplate implements SliderCaptchaTemplate { /** @@ -186,6 +188,11 @@ public class DefaultSliderCaptchaTemplate implements SliderCaptchaTemplate { @SneakyThrows public SliderCaptchaInfo getSlideImageInfo(String targetFormatName, String matrixFormatName) { + if (resourceImageFiles.isEmpty() || templateImageFiles.isEmpty()) { + log.warn("滑块验证码生成失败, 资源或模板为空,不能进行生成, 资源文件列表长度: {}, 模板文件列表长度: {}", + resourceImageFiles.size(), templateImageFiles.size()); + return null; + } URL resourceImage = getRandomResourceImage(); Map templateImages = getRandomTemplateImages();