WANG 6 年之前
父節點
當前提交
3dbe98ff29

+ 6 - 4
examcloud-core-basic-base/pom.xml

@@ -1,8 +1,5 @@
 <?xml version="1.0"?>
-<project
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
-	xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 	<modelVersion>4.0.0</modelVersion>
 	<parent>
 		<groupId>cn.com.qmth.examcloud.core.basic</groupId>
@@ -22,6 +19,11 @@
 			<artifactId>examcloud-reports-commons</artifactId>
 			<version>${examcloud.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>com.github.penggle</groupId>
+			<artifactId>kaptcha</artifactId>
+			<version>2.3.2</version>
+		</dependency>
 	</dependencies>
 
 </project>

+ 14 - 0
examcloud-core-basic-service/src/main/java/cn/com/qmth/examcloud/core/basic/service/ImgCodeService.java

@@ -0,0 +1,14 @@
+package cn.com.qmth.examcloud.core.basic.service;
+
+/**
+ * 类注释
+ *
+ * @author WANGWEI
+ * @date 2018年12月26日
+ * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
+ */
+public interface ImgCodeService {
+
+	byte[] generate(String key);
+
+}

+ 47 - 0
examcloud-core-basic-service/src/main/java/cn/com/qmth/examcloud/core/basic/service/impl/ImgCodeServiceImpl.java

@@ -0,0 +1,47 @@
+package cn.com.qmth.examcloud.core.basic.service.impl;
+
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import javax.imageio.ImageIO;
+
+import org.apache.poi.util.IOUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.google.code.kaptcha.impl.DefaultKaptcha;
+
+import cn.com.qmth.examcloud.commons.base.exception.ExamCloudRuntimeException;
+import cn.com.qmth.examcloud.core.basic.service.ImgCodeService;
+
+/**
+ * 类注释
+ *
+ * @author WANGWEI
+ * @date 2018年12月26日
+ * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
+ */
+@Service
+public class ImgCodeServiceImpl implements ImgCodeService {
+
+	@Autowired
+	DefaultKaptcha defaultKaptcha;
+
+	@Override
+	public byte[] generate(String key) {
+		ByteArrayOutputStream out = null;
+		try {
+			out = new ByteArrayOutputStream();
+			String createText = defaultKaptcha.createText();
+			BufferedImage challenge = defaultKaptcha.createImage(createText);
+			ImageIO.write(challenge, "jpg", out);
+			return out.toByteArray();
+		} catch (IOException e) {
+			throw new ExamCloudRuntimeException(e);
+		} finally {
+			IOUtils.closeQuietly(out);
+		}
+	}
+
+}

+ 24 - 0
examcloud-core-basic-starter/src/main/java/cn/com/qmth/examcloud/core/basic/starter/CoreBasicApp.java

@@ -1,5 +1,7 @@
 package cn.com.qmth.examcloud.core.basic.starter;
 
+import java.util.Properties;
+
 import org.slf4j.MDC;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -25,6 +27,8 @@ import org.springframework.web.multipart.commons.CommonsMultipartResolver;
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.PropertyAccessor;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.code.kaptcha.impl.DefaultKaptcha;
+import com.google.code.kaptcha.util.Config;
 
 import cn.com.qmth.examcloud.commons.base.logging.ExamCloudLog;
 import cn.com.qmth.examcloud.commons.base.logging.ExamCloudLogFactory;
@@ -106,4 +110,24 @@ public class CoreBasicApp {
 		resolver.setMaxUploadSize(200 * 1024 * 1024);
 		return resolver;
 	}
+
+	@Bean
+	public DefaultKaptcha getDefaultKaptcha() {
+		DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
+		Properties properties = new Properties();
+		properties.setProperty("kaptcha.border", "yes");
+		properties.setProperty("kaptcha.border.color", "105,179,90");
+		properties.setProperty("kaptcha.textproducer.font.color", "blue");
+		properties.setProperty("kaptcha.image.width", "110");
+		properties.setProperty("kaptcha.image.height", "40");
+		properties.setProperty("kaptcha.textproducer.font.size", "30");
+		properties.setProperty("kaptcha.session.key", "code");
+		properties.setProperty("kaptcha.textproducer.char.length", "4");
+		properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
+		Config config = new Config(properties);
+		defaultKaptcha.setConfig(config);
+
+		return defaultKaptcha;
+	}
+
 }