
引入依赖
1
compile group: 'com.github.cage', name: 'cage', version:'1.0'
逻辑处理
Captcha.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import com.github.cage.Cage;
import com.github.cage.GCage;
import com.github.cage.YCage;
import lombok.experimental.UtilityClass;
import net.jodah.expiringmap.ExpiringMap;
import org.apache.commons.lang3.RandomStringUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
@UtilityClass
public final class Captcha {
private static final Cage GCAGE = new GCage();//similar to google
private static final Cage YCAGE = new YCage();//similar to yahoo
private static final ExpiringMap<String, String> CACHE = ExpiringMap.builder()
.expiration(1, TimeUnit.MINUTES).build();
public static void generate(HttpServletResponse response) {
String key = TUtil.uuid();
response.setHeader("Access-Control-Expose-Headers", "Key");
response.setHeader("Key", key);
response.setHeader("Content-disposition", "inline");
response.setContentType(MimeTypeUtils.IMAGE_JPEG_VALUE);
String text = RandomStringUtils.randomAlphanumeric(4);
try {
GCAGE.draw(text, response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
return;
}
CACHE.put(key, text);
}
public static boolean acquire(String key, String code) {
String value = CACHE.get(key);
if (value == null || !code.equalsIgnoreCase(value)) {
return false;
} else {
CACHE.remove(key);
return true;
}
}
}




近期评论