提交 0c494761 编写于 作者: O o2null

Merge branch 'fix/图片验证码优化' into 'wrdp'

图片验证码优化    不到java8

See merge request o2oa/o2oa!5615
......@@ -364,8 +364,8 @@
<artifactId>cache-ri-impl</artifactId>
</dependency>
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
......@@ -1084,9 +1084,9 @@
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
......
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<Wo> execute(Integer width, Integer height) throws Exception {
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
ActionResult<Wo> 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;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册