fix: TacBuilder中添加资源只能添加一条的bug

This commit is contained in:
tianai
2026-02-09 19:28:56 +08:00
parent 387ed937f8
commit cfab8ce3ac
2 changed files with 22 additions and 20 deletions
@@ -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<FontWrapper> fontWrappers = new ArrayList<>();
private Map<String, Resource> resourceCache;
private Map<String, ResourceMap> templateCache;
private Map<String, List<Resource>> resourceCache = new HashMap<>(8);
private Map<String, List<ResourceMap>> 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);
}
}
@@ -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"))