WANG преди 6 години
родител
ревизия
50366c7608

+ 21 - 0
examcloud-core-basic-api-provider/src/main/java/cn/com/qmth/examcloud/core/basic/api/controller/AuthController.java

@@ -1,10 +1,14 @@
 package cn.com.qmth.examcloud.core.basic.api.controller;
 
+import java.io.IOException;
+
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -12,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import cn.com.qmth.examcloud.commons.base.exception.StatusException;
+import cn.com.qmth.examcloud.commons.web.redis.RedisClient;
 import cn.com.qmth.examcloud.commons.web.security.bean.User;
 import cn.com.qmth.examcloud.commons.web.support.ControllerSupport;
 import cn.com.qmth.examcloud.commons.web.support.ResponseStatus;
@@ -19,6 +24,7 @@ import cn.com.qmth.examcloud.commons.web.support.StatusResponse;
 import cn.com.qmth.examcloud.core.basic.dao.StudentRepo;
 import cn.com.qmth.examcloud.core.basic.dao.entity.StudentEntity;
 import cn.com.qmth.examcloud.core.basic.service.AuthService;
+import cn.com.qmth.examcloud.core.basic.service.ImgCodeService;
 import cn.com.qmth.examcloud.core.basic.service.SmsCodeService;
 import cn.com.qmth.examcloud.core.basic.service.StudentService;
 import cn.com.qmth.examcloud.core.basic.service.bean.LoginInfo;
@@ -39,6 +45,9 @@ public class AuthController extends ControllerSupport {
 	@Autowired
 	AuthService authService;
 
+	@Autowired
+	RedisClient redisClient;
+
 	@Autowired
 	SmsCodeService smsCodeService;
 
@@ -48,6 +57,9 @@ public class AuthController extends ControllerSupport {
 	@Autowired
 	StudentService studentService;
 
+	@Autowired
+	ImgCodeService imgCodeService;
+
 	@ApiOperation(value = "登入", notes = "")
 	@PostMapping("login")
 	public Object login(@RequestBody LoginInfo loginInfo, HttpServletRequest request) {
@@ -156,4 +168,13 @@ public class AuthController extends ControllerSupport {
 		studentRepo.saveAndFlush(s);
 	}
 
+	@ApiOperation(value = "获取验证码图片", notes = "")
+	@GetMapping("code.jpg")
+	public void getCodeImg(@RequestParam(required = true) String sessionId,
+			HttpServletRequest request, HttpServletResponse response) throws IOException {
+		response.setContentType("image/jpg");
+		String code = imgCodeService.generate(response.getOutputStream());
+		redisClient.set("$_IMG_" + sessionId, code, 30);
+	}
+
 }

+ 11 - 2
examcloud-core-basic-service/src/main/java/cn/com/qmth/examcloud/core/basic/service/ImgCodeService.java

@@ -1,7 +1,9 @@
 package cn.com.qmth.examcloud.core.basic.service;
 
+import java.io.OutputStream;
+
 /**
- * 类注释
+ * 图片验证码
  *
  * @author WANGWEI
  * @date 2018年12月26日
@@ -9,6 +11,13 @@ package cn.com.qmth.examcloud.core.basic.service;
  */
 public interface ImgCodeService {
 
-	byte[] generate(String key);
+	/**
+	 * 生成验证码图片
+	 *
+	 * @author WANGWEI
+	 * @param out
+	 * @return 验证码
+	 */
+	String generate(OutputStream out);
 
 }

+ 26 - 0
examcloud-core-basic-service/src/main/java/cn/com/qmth/examcloud/core/basic/service/bean/LoginInfo.java

@@ -12,6 +12,11 @@ public class LoginInfo implements JsonSerializable {
 
 	private static final long serialVersionUID = 1305354276321732681L;
 
+	/**
+	 * 会话ID
+	 */
+	private String sessionId;
+
 	/**
 	 * 顶级机构ID
 	 */
@@ -42,6 +47,11 @@ public class LoginInfo implements JsonSerializable {
 	 */
 	private String smsCode;
 
+	/**
+	 * 图片验证码
+	 */
+	private String imgCode;
+
 	/**
 	 * 客户端IP
 	 */
@@ -52,6 +62,14 @@ public class LoginInfo implements JsonSerializable {
 	 */
 	private Boolean alwaysOK;
 
+	public String getSessionId() {
+		return sessionId;
+	}
+
+	public void setSessionId(String sessionId) {
+		this.sessionId = sessionId;
+	}
+
 	public Long getRootOrgId() {
 		return rootOrgId;
 	}
@@ -116,4 +134,12 @@ public class LoginInfo implements JsonSerializable {
 		this.smsCode = smsCode;
 	}
 
+	public String getImgCode() {
+		return imgCode;
+	}
+
+	public void setImgCode(String imgCode) {
+		this.imgCode = imgCode;
+	}
+
 }

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

@@ -1,8 +1,8 @@
 package cn.com.qmth.examcloud.core.basic.service.impl;
 
 import java.awt.image.BufferedImage;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.OutputStream;
 
 import javax.imageio.ImageIO;
 
@@ -29,14 +29,12 @@ public class ImgCodeServiceImpl implements ImgCodeService {
 	DefaultKaptcha defaultKaptcha;
 
 	@Override
-	public byte[] generate(String key) {
-		ByteArrayOutputStream out = null;
+	public String generate(OutputStream out) {
 		try {
-			out = new ByteArrayOutputStream();
 			String createText = defaultKaptcha.createText();
 			BufferedImage challenge = defaultKaptcha.createImage(createText);
 			ImageIO.write(challenge, "jpg", out);
-			return out.toByteArray();
+			return createText;
 		} catch (IOException e) {
 			throw new ExamCloudRuntimeException(e);
 		} finally {

+ 4 - 6
examcloud-core-basic-starter/src/main/java/cn/com/qmth/examcloud/core/basic/starter/CoreBasicApp.java

@@ -115,15 +115,13 @@ public class CoreBasicApp {
 	public DefaultKaptcha getDefaultKaptcha() {
 		DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
 		Properties properties = new Properties();
-		properties.setProperty("kaptcha.border", "yes");
+		properties.setProperty("kaptcha.border", "no");
 		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.image.width", "120");
+		properties.setProperty("kaptcha.image.height", "50");
 		properties.setProperty("kaptcha.textproducer.char.length", "4");
-		properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
+		properties.setProperty("kaptcha.textproducer.font.names", "Microsoft Yahei");
 		Config config = new Config(properties);
 		defaultKaptcha.setConfig(config);
 

+ 1 - 0
examcloud-core-basic-starter/src/main/resources/security-exclusions.conf

@@ -14,6 +14,7 @@ regexp:.*webjars.*
 [${$rmp.ctr.basic}/org][getRootOrgByCode][GET]
 [${$rmp.ctr.basic}/org][propertyNoSession/{key}][GET]
 [${$rmp.ctr.basic}/auth][sendVerificationCode4Student][POST]
+[${$rmp.ctr.basic}/auth][code.jpg][GET]