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; + } }