From cfab8ce3ac0a9315c008f5f2cb022deed6f1f7e3 Mon Sep 17 00:00:00 2001 From: tianai Date: Mon, 9 Feb 2026 19:28:56 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20TacBuilder=E4=B8=AD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E5=8F=AA=E8=83=BD=E6=B7=BB=E5=8A=A0=E4=B8=80?= =?UTF-8?q?=E6=9D=A1=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../captcha/application/TACBuilder.java | 39 ++++++++++--------- .../java/example/readme/TACBuilderTest.java | 3 +- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/tianai-captcha/src/main/java/cloud/tianai/captcha/application/TACBuilder.java b/tianai-captcha/src/main/java/cloud/tianai/captcha/application/TACBuilder.java index 0428ab4..42cb494 100644 --- a/tianai-captcha/src/main/java/cloud/tianai/captcha/application/TACBuilder.java +++ b/tianai-captcha/src/main/java/cloud/tianai/captcha/application/TACBuilder.java @@ -17,9 +17,7 @@ import cloud.tianai.captcha.resource.impl.LocalMemoryResourceStore; import cloud.tianai.captcha.validator.ImageCaptchaValidator; import cloud.tianai.captcha.validator.impl.SimpleImageCaptchaValidator; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * @Author: 天爱有情 @@ -36,9 +34,10 @@ public class TACBuilder { private ResourceStore resourceStore; private ImageTransform imageTransform; // private List fontWrappers = new ArrayList<>(); - private Map resourceCache; - private Map templateCache; + private Map> resourceCache = new HashMap<>(8); + private Map> templateCache = new HashMap<>(8); + private String defaultTemplatePrefix = null; public static TACBuilder builder() { return new TACBuilder(); } @@ -53,8 +52,7 @@ public class TACBuilder { } public TACBuilder addDefaultTemplate(String defaultPathPrefix) { - DefaultBuiltInResources defaultBuiltInResources = new DefaultBuiltInResources(defaultPathPrefix); - defaultBuiltInResources.addDefaultTemplate(resourceStore); + this.defaultTemplatePrefix = defaultPathPrefix; return this; } @@ -155,14 +153,23 @@ public class TACBuilder { if (resourceStore instanceof CrudResourceStore) { CrudResourceStore crudResourceStore = (CrudResourceStore) resourceStore; if (!CollectionUtils.isEmpty(resourceCache)) { - resourceCache.forEach(crudResourceStore::addResource); - resourceCache = null; + resourceCache.forEach((type,resources) -> { + resources.forEach(resource -> crudResourceStore.addResource(type,resource)); + }); + resourceCache.clear(); } if (!CollectionUtils.isEmpty(templateCache)) { - templateCache.forEach(crudResourceStore::addTemplate); - templateCache = null; + templateCache.forEach((type, templates) -> { + templates.forEach(template -> crudResourceStore.addTemplate(type, template)); + }); + templateCache.clear(); } } + // 添加默认模板 + if (defaultTemplatePrefix != null) { + DefaultBuiltInResources defaultBuiltInResources = new DefaultBuiltInResources(defaultTemplatePrefix); + defaultBuiltInResources.addDefaultTemplate(resourceStore); + } if (generator == null) { ResourceProviders resourceProviders = new ResourceProviders(); DefaultImageCaptchaResourceManager resourceManager = new DefaultImageCaptchaResourceManager(resourceStore, resourceProviders); @@ -183,16 +190,10 @@ public class TACBuilder { } private void cacheResource(String captchaType, Resource imageResource) { - if (resourceCache == null) { - resourceCache = new LinkedHashMap<>(8); - } - resourceCache.put(captchaType, imageResource); + resourceCache.computeIfAbsent(captchaType, k -> new ArrayList<>(4)).add(imageResource); } private void cacheTemplate(String captchaType, ResourceMap resourceMap) { - if (templateCache == null) { - templateCache = new LinkedHashMap<>(8); - } - templateCache.put(captchaType, resourceMap); + templateCache.computeIfAbsent(captchaType, k -> new ArrayList<>(4)).add(resourceMap); } } diff --git a/tianai-captcha/src/test/java/example/readme/TACBuilderTest.java b/tianai-captcha/src/test/java/example/readme/TACBuilderTest.java index 2e07962..87109ed 100644 --- a/tianai-captcha/src/test/java/example/readme/TACBuilderTest.java +++ b/tianai-captcha/src/test/java/example/readme/TACBuilderTest.java @@ -58,7 +58,7 @@ public class TACBuilderTest { ImageCaptchaApplication application = TACBuilder.builder() // 设置资源存储器,默认是 LocalMemoryResourceStore - .setResourceStore(new LocalMemoryResourceStore()) +// .setResourceStore(new LocalMemoryResourceStore()) // 加载系统自带的默认资源(系统内置了几个滑块验证码缺口模板图,调用此函数加载) .addDefaultTemplate() // 设置验证码过期时间, 单位毫秒, default 是默认验证码过期时间,当前设置为10秒, @@ -71,6 +71,7 @@ public class TACBuilderTest { // arg1 验证码类型(SLIDER、WORD_IMAGE_CLICK、ROTATE、CONCAT), // arg2 验证码背景图片资源 .addResource(CaptchaTypeConstant.SLIDER, new Resource("classpath", "META-INF/cut-image/resource/1.jpg")) + .addResource(CaptchaTypeConstant.SLIDER, new Resource("classpath", "META-INF/cut-image/resource/1.jpg")) .addResource(CaptchaTypeConstant.WORD_IMAGE_CLICK, new Resource("classpath", "META-INF/cut-image/resource/1.jpg")) .addResource(CaptchaTypeConstant.ROTATE, new Resource("classpath", "META-INF/cut-image/resource/1.jpg")) .addResource(CaptchaTypeConstant.CONCAT, new Resource("classpath", "META-INF/cut-image/resource/1.jpg"))