mirror of
https://github.com/dromara/tianai-captcha.git
synced 2026-05-07 06:04:34 +08:00
修复在并发场景下验证器生成多次的问题
This commit is contained in:
@@ -18,6 +18,7 @@ import lombok.Setter;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: 天爱有情
|
* @Author: 天爱有情
|
||||||
@@ -26,7 +27,7 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
|
public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
|
||||||
|
|
||||||
protected Map<String, ImageCaptchaGenerator> imageCaptchaGeneratorMap = new HashMap<>(4);
|
protected Map<String, ImageCaptchaGenerator> imageCaptchaGeneratorMap = new ConcurrentHashMap<>(4);
|
||||||
protected Map<String, ImageCaptchaGeneratorProvider> imageCaptchaGeneratorProviderMap = new HashMap<>(4);
|
protected Map<String, ImageCaptchaGeneratorProvider> imageCaptchaGeneratorProviderMap = new HashMap<>(4);
|
||||||
|
|
||||||
@Setter
|
@Setter
|
||||||
@@ -93,16 +94,14 @@ public class MultiImageCaptchaGenerator extends AbstractImageCaptchaGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ImageCaptchaGenerator requireGetCaptchaGenerator(String type) {
|
public ImageCaptchaGenerator requireGetCaptchaGenerator(String type) {
|
||||||
ImageCaptchaGenerator imageCaptchaGenerator = imageCaptchaGeneratorMap.get(type);
|
ImageCaptchaGenerator imageCaptchaGenerator = imageCaptchaGeneratorMap.computeIfAbsent(type, t -> {
|
||||||
if (imageCaptchaGenerator == null) {
|
ImageCaptchaGeneratorProvider provider = imageCaptchaGeneratorProviderMap.get(t);
|
||||||
ImageCaptchaGeneratorProvider provider = imageCaptchaGeneratorProviderMap.get(type);
|
|
||||||
if (provider == null) {
|
if (provider == null) {
|
||||||
throw new IllegalArgumentException("生成验证码失败,错误的type类型:" + type);
|
throw new IllegalArgumentException("生成验证码失败,错误的type类型:" + t);
|
||||||
}
|
}
|
||||||
imageCaptchaGenerator = imageCaptchaGeneratorMap.computeIfAbsent(type, k ->
|
return provider.get(getImageResourceManager(), getImageTransform()).init(initDefaultResource);
|
||||||
// get and init
|
});
|
||||||
provider.get(getImageResourceManager(), getImageTransform()).init(initDefaultResource));
|
|
||||||
}
|
|
||||||
return imageCaptchaGenerator;
|
return imageCaptchaGenerator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user