U 修改资源读取和存储模块

升级版本为1.2
This commit is contained in:
liushaofeng
2021-08-07 17:16:57 +08:00
parent c5260356de
commit b56919f17d
14 changed files with 702 additions and 223 deletions
@@ -0,0 +1,106 @@
package cloud.tianai.captcha.template.slider;
import cloud.tianai.captcha.template.slider.provider.ClassPathResourceProvider;
import cloud.tianai.captcha.template.slider.provider.URLResourceProvider;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ThreadLocalRandom;
/**
* @Author: 天爱有情
* @date 2021/8/7 15:35
* @Description 默认的滑块验证码资源管理
*/
public class DefaultSliderCaptchaResourceManager implements SliderCaptchaResourceManager {
private ResourceStore resourceStore;
private List<ResourceProvider> resourceProviderList = new ArrayList<>(8);
public DefaultSliderCaptchaResourceManager() {
init();
}
public DefaultSliderCaptchaResourceManager(ResourceStore resourceStore) {
this.resourceStore = resourceStore;
init();
}
private void init() {
if (this.resourceStore == null) {
this.resourceStore = new DefaultResourceStore();
}
// 注入一些默认的提供者
registerResourceProvider(new URLResourceProvider());
registerResourceProvider(new ClassPathResourceProvider());
}
@Override
public Map<String, Resource> randomGetTemplate() {
int count = resourceStore.getTemplateCount();
if (count < 1) {
throw new IllegalStateException("随机获取模板错误,store中模板为空");
}
if (count == 1) {
return resourceStore.getTemplateByIndex(0);
}
int randomIndex = ThreadLocalRandom.current().nextInt(count);
return resourceStore.getTemplateByIndex(randomIndex);
}
@Override
public Resource randomGetResource() {
int count = resourceStore.getResourceCount();
if (count < 1) {
throw new IllegalStateException("随机获取资源错误,store中资源为空");
}
if (count == 1) {
return resourceStore.getResourceByIndex(0);
}
int randomIndex = ThreadLocalRandom.current().nextInt(count);
return resourceStore.getResourceByIndex(randomIndex);
}
@Override
public InputStream getResourceInputStream(Resource resource) {
for (ResourceProvider resourceProvider : resourceProviderList) {
if (resourceProvider.supported(resource.getType())) {
return resourceProvider.getResourceInputStream(resource);
}
}
throw new IllegalStateException("没有找到Resource [" + resource.getType() + "]对应的资源提供者");
}
@Override
public List<ResourceProvider> listResourceProviders() {
return Collections.unmodifiableList(resourceProviderList);
}
@Override
public void registerResourceProvider(ResourceProvider resourceProvider) {
deleteResourceProviderByName(resourceProvider.getName());
resourceProviderList.add(resourceProvider);
}
@Override
public boolean deleteResourceProviderByName(String name) {
return resourceProviderList.removeIf(r -> r.getName().equals(name));
}
@Override
public void setResourceStore(ResourceStore resourceStore) {
this.resourceStore = resourceStore;
}
@Override
public ResourceStore getResourceStore() {
return resourceStore;
}
}