|
@@ -1,5 +1,8 @@
|
|
package com.ym.mec.web.controller;
|
|
package com.ym.mec.web.controller;
|
|
|
|
|
|
|
|
+import com.google.code.kaptcha.Constants;
|
|
|
|
+import com.google.code.kaptcha.Producer;
|
|
|
|
+import com.google.code.kaptcha.servlet.KaptchaServlet;
|
|
import com.ym.mec.biz.service.SmsCodeService;
|
|
import com.ym.mec.biz.service.SmsCodeService;
|
|
import com.ym.mec.common.controller.BaseController;
|
|
import com.ym.mec.common.controller.BaseController;
|
|
import com.ym.mec.common.security.SecurityConstants;
|
|
import com.ym.mec.common.security.SecurityConstants;
|
|
@@ -9,10 +12,18 @@ import io.swagger.annotations.ApiImplicitParams;
|
|
import io.swagger.annotations.ApiOperation;
|
|
import io.swagger.annotations.ApiOperation;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
|
+import org.springframework.web.bind.annotation.GetMapping;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
|
|
+import javax.imageio.ImageIO;
|
|
|
|
+import javax.servlet.ServletOutputStream;
|
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
|
+import java.awt.image.BufferedImage;
|
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
+
|
|
@RestController
|
|
@RestController
|
|
@RequestMapping("code")
|
|
@RequestMapping("code")
|
|
@Api(tags = "验证码服务")
|
|
@Api(tags = "验证码服务")
|
|
@@ -20,6 +31,10 @@ public class SmsCodeController extends BaseController {
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private SmsCodeService smsCodeService;
|
|
private SmsCodeService smsCodeService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private Producer captchaProducer;
|
|
|
|
+ @Autowired
|
|
|
|
+ private RedisTemplate<String,String> redisTemplate;
|
|
|
|
|
|
@ApiOperation(value = "发送登录短信验证码")
|
|
@ApiOperation(value = "发送登录短信验证码")
|
|
@ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String")
|
|
@ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String")
|
|
@@ -42,4 +57,55 @@ public class SmsCodeController extends BaseController {
|
|
}
|
|
}
|
|
return failed();
|
|
return failed();
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @PostMapping(value = "/verifyLoginImage")
|
|
|
|
+ @ApiOperation("校验登录图形验证码")
|
|
|
|
+ @ApiImplicitParams({ @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String"),
|
|
|
|
+ @ApiImplicitParam(name = "code", value = "验证码", required = true, dataType = "String") })
|
|
|
|
+ public Object verifyImageCode(String phone,String code){
|
|
|
|
+ if(StringUtils.isEmpty(phone) || StringUtils.isEmpty(code)){
|
|
|
|
+ return failed(SecurityConstants.PARAM_VERIFY_EXCEPTION);
|
|
|
|
+ }
|
|
|
|
+ String redisKey = Constants.KAPTCHA_SESSION_KEY + phone;
|
|
|
|
+ if(redisTemplate.hasKey(redisKey)){
|
|
|
|
+ if(StringUtils.equalsIgnoreCase(redisTemplate.opsForValue().get(redisKey),code)){
|
|
|
|
+ return succeed();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return failed(SecurityConstants.VERIFY_FAILURE);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @GetMapping(value = "/getLoginImage")
|
|
|
|
+ @ApiOperation("获取登录图片验证码")
|
|
|
|
+ @ApiImplicitParam(name = "phone", value = "手机号", required = true, dataType = "String")
|
|
|
|
+ public void getKaptchaImage(HttpServletResponse response, String phone) throws Exception {
|
|
|
|
+ if(StringUtils.isEmpty(phone)){
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ response.setDateHeader("Expires", 0);
|
|
|
|
+
|
|
|
|
+ // Set standard HTTP/1.1 no-cache headers.
|
|
|
|
+ response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
|
|
|
|
+ // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
|
|
|
|
+ response.addHeader("Cache-Control", "post-check=0, pre-check=0");
|
|
|
|
+ // Set standard HTTP/1.0 no-cache header.
|
|
|
|
+ response.setHeader("Pragma", "no-cache");
|
|
|
|
+ // return a jpeg
|
|
|
|
+ response.setContentType("image/jpeg");
|
|
|
|
+ // create the text for the image
|
|
|
|
+ String capText = captchaProducer.createText();
|
|
|
|
+
|
|
|
|
+ redisTemplate.opsForValue().set(Constants.KAPTCHA_SESSION_KEY + phone,capText,3, TimeUnit.MINUTES);
|
|
|
|
+ // create the image with the text
|
|
|
|
+ BufferedImage bi = captchaProducer.createImage(capText);
|
|
|
|
+ KaptchaServlet kaptchaServlet = new KaptchaServlet();
|
|
|
|
+ kaptchaServlet.init();
|
|
|
|
+ ServletOutputStream out = response.getOutputStream();
|
|
|
|
+ try {
|
|
|
|
+ ImageIO.write(bi, "jpg", out);
|
|
|
|
+ out.flush();
|
|
|
|
+ } finally {
|
|
|
|
+ out.close();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|