mirror of
https://github.com/dromara/tianai-captcha.git
synced 2026-05-07 06:04:34 +08:00
1. 更改版本号为1.0.1-alpha
2. 优化缓冲池,当池内没数据时则直接生成
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>cloud.tianai.captcha</groupId>
|
<groupId>cloud.tianai.captcha</groupId>
|
||||||
<artifactId>tianai-captcha</artifactId>
|
<artifactId>tianai-captcha</artifactId>
|
||||||
<version>1.0</version>
|
<version>1.0.1-alpha</version>
|
||||||
|
|
||||||
<name>tianai-captcha</name>
|
<name>tianai-captcha</name>
|
||||||
<description>滑块验证码</description>
|
<description>滑块验证码</description>
|
||||||
|
|||||||
+23
-24
@@ -1,6 +1,5 @@
|
|||||||
package cloud.tianai.captcha.template.slider;
|
package cloud.tianai.captcha.template.slider;
|
||||||
|
|
||||||
import cloud.tianai.captcha.template.slider.exception.SliderCaptchaException;
|
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@@ -13,10 +12,14 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
|
|||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: 天爱有情
|
||||||
|
* @date 2020/10/20 9:23
|
||||||
|
* @Description 滑块验证码缓冲器
|
||||||
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class CacheSliderCaptchaTemplate implements SliderCaptchaTemplate {
|
public class CacheSliderCaptchaTemplate implements SliderCaptchaTemplate {
|
||||||
|
|
||||||
public static final int RETRY = 10;
|
|
||||||
private final ScheduledExecutorService scheduledExecutor = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("slider-captcha-queue"));
|
private final ScheduledExecutorService scheduledExecutor = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("slider-captcha-queue"));
|
||||||
private ConcurrentLinkedQueue<SliderCaptchaInfo> queue;
|
private ConcurrentLinkedQueue<SliderCaptchaInfo> queue;
|
||||||
private AtomicInteger pos = new AtomicInteger(0);
|
private AtomicInteger pos = new AtomicInteger(0);
|
||||||
@@ -65,15 +68,11 @@ public class CacheSliderCaptchaTemplate implements SliderCaptchaTemplate {
|
|||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@Override
|
@Override
|
||||||
public SliderCaptchaInfo getSlideImageInfo() {
|
public SliderCaptchaInfo getSlideImageInfo() {
|
||||||
SliderCaptchaInfo poll;
|
SliderCaptchaInfo poll = queue.poll();
|
||||||
int retryIdx = 0;
|
if (poll == null) {
|
||||||
while ((poll = queue.poll()) == null) {
|
log.warn("滑块验证码缓存不足");
|
||||||
retryIdx++;
|
// 如果池内没数据, 则直接生成
|
||||||
if (retryIdx > RETRY) {
|
return target.getSlideImageInfo();
|
||||||
throw new SliderCaptchaException("获取滑块验证码限流");
|
|
||||||
}
|
|
||||||
// 休眠50毫秒
|
|
||||||
TimeUnit.MILLISECONDS.sleep(50);
|
|
||||||
}
|
}
|
||||||
// 减1
|
// 减1
|
||||||
pos.decrementAndGet();
|
pos.decrementAndGet();
|
||||||
@@ -81,19 +80,19 @@ public class CacheSliderCaptchaTemplate implements SliderCaptchaTemplate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void main(String[] args) throws InterruptedException {
|
// public static void main(String[] args) throws InterruptedException {
|
||||||
SliderCaptchaTemplate captchaTemplate = new DefaultSliderCaptchaTemplate("jpeg", "png", true);
|
// SliderCaptchaTemplate captchaTemplate = new DefaultSliderCaptchaTemplate("jpeg", "png", true);
|
||||||
|
//
|
||||||
captchaTemplate = new CacheSliderCaptchaTemplate(captchaTemplate, 20);
|
// captchaTemplate = new CacheSliderCaptchaTemplate(captchaTemplate, 20);
|
||||||
TimeUnit.SECONDS.sleep(5);
|
// TimeUnit.SECONDS.sleep(5);
|
||||||
for (int i = 0; i < 100; i++) {
|
// for (int i = 0; i < 100; i++) {
|
||||||
long start = System.currentTimeMillis();
|
// long start = System.currentTimeMillis();
|
||||||
SliderCaptchaInfo info = captchaTemplate.getSlideImageInfo();
|
// SliderCaptchaInfo info = captchaTemplate.getSlideImageInfo();
|
||||||
long end = System.currentTimeMillis();
|
// long end = System.currentTimeMillis();
|
||||||
System.out.println("耗时:" + (end - start));
|
// System.out.println("耗时:" + (end - start));
|
||||||
TimeUnit.MILLISECONDS.sleep(10);
|
// TimeUnit.MILLISECONDS.sleep(10);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addResource(URL url) {
|
public void addResource(URL url) {
|
||||||
|
|||||||
Reference in New Issue
Block a user