diff --git a/o2server/pom.xml b/o2server/pom.xml
index 0377d94f14b3ab124663733579ad704f9159ce68..7b5276dc9b258af8d03c5d3c60aee572886954cb 100644
--- a/o2server/pom.xml
+++ b/o2server/pom.xml
@@ -364,8 +364,8 @@
cache-ri-impl
- com.github.whvcse
- easy-captcha
+ com.github.penggle
+ kaptcha
org.apache.hadoop
@@ -1084,9 +1084,9 @@
1.1.1
- com.github.whvcse
- easy-captcha
- 1.6.2
+ com.github.penggle
+ kaptcha
+ 2.3.2
org.apache.hadoop
diff --git a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/captcha/V2Create.java b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/captcha/V2Create.java
index a18d23f2d7bbd6c4f0eab6cbc74e426e3e2cd0b6..4369e588595a53167b2fc50cb8923d3b8d139821 100644
--- a/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/captcha/V2Create.java
+++ b/o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/captcha/V2Create.java
@@ -1,21 +1,26 @@
package com.x.program.center.jaxrs.captcha;
-import java.awt.Font;
+import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
+import java.util.Base64;
+import java.util.Properties;
-import org.apache.commons.lang3.StringUtils;
+import com.google.code.kaptcha.Constants;
+import com.google.code.kaptcha.Producer;
+import com.google.code.kaptcha.impl.DefaultKaptcha;
+import com.google.code.kaptcha.util.Config;
-import com.wf.captcha.SpecCaptcha;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.entity.annotation.CheckPersistType;
import com.x.base.core.project.annotation.FieldDescribe;
-import com.x.base.core.project.config.Config;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.program.center.core.entity.Captcha;
+import javax.imageio.ImageIO;
+
class V2Create extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(V2Create.class);
@@ -23,30 +28,28 @@ class V2Create extends BaseAction {
ActionResult execute(Integer width, Integer height) throws Exception {
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
ActionResult result = new ActionResult<>();
- if (width <= 80 && width > 800) {
+ if (width <= 80 || width > 800) {
width = 80;
}
- if (width <= 30 && width > 800) {
- width = 30;
- }
-
- SpecCaptcha specCaptcha = new SpecCaptcha(width, height, 4);
- specCaptcha.setCharType(com.wf.captcha.base.Captcha.TYPE_ONLY_NUMBER);
-
- if (StringUtils.isNotBlank(Config.person().getCaptchaFont())) {
- specCaptcha.setFont(new Font(Config.person().getCaptchaFont(), Font.PLAIN, 32));
+ if (height <= 30 || height > 800) {
+ height = 30;
}
+ Producer producer = createProducer(width, height);
+ // 生成随机字符串
+ String verifyCode = producer.createText();
+ // 生成图片
+ BufferedImage bufferedImage = producer.createImage(verifyCode);
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ ImageIO.write(bufferedImage, "png", stream);
emc.beginTransaction(Captcha.class);
Captcha captcha = new Captcha();
- captcha.setAnswer(specCaptcha.text());
+ captcha.setAnswer(verifyCode);
emc.persist(captcha, CheckPersistType.all);
emc.commit();
Wo wo = new Wo();
wo.setId(captcha.getId());
- try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
- wo.setImage(specCaptcha.toBase64(""));
- }
+ wo.setImage(Base64.getEncoder().encodeToString(stream.toByteArray()));
result.setData(wo);
return result;
}
@@ -77,4 +80,22 @@ class V2Create extends BaseAction {
}
}
+
+ private static Producer createProducer(Integer width, Integer height) {
+ Properties properties = new Properties();
+ properties.setProperty(Constants.KAPTCHA_BORDER, "no");
+ properties.setProperty(Constants.KAPTCHA_BORDER_COLOR, "105,179,90");
+ properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black");
+ properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, width.toString());
+ properties.setProperty(Constants.KAPTCHA_IMAGE_HEIGHT, height.toString());
+ properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
+ properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_SIZE, "40");
+ properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_NAMES, "宋体,楷体,微软雅黑");
+ properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_STRING, "1234567890");
+ //properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "5");
+ Config config = new Config(properties);
+ DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
+ defaultKaptcha.setConfig(config);
+ return defaultKaptcha;
+ }
}