|
|
@@ -0,0 +1,60 @@
|
|
|
+package cn.iselab.mooctest.site.web.ctrl;
|
|
|
+
|
|
|
+import cn.iselab.mooctest.site.common.constant.UrlConstants;
|
|
|
+import cn.iselab.mooctest.site.util.data.EncryptionUtil;
|
|
|
+import com.google.code.kaptcha.impl.DefaultKaptcha;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Controller;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.servlet.ModelAndView;
|
|
|
+
|
|
|
+import javax.imageio.ImageIO;
|
|
|
+import javax.servlet.ServletOutputStream;
|
|
|
+import javax.servlet.http.Cookie;
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.awt.image.BufferedImage;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author sean
|
|
|
+ * @date 2017-03-21.
|
|
|
+ */
|
|
|
+@Controller
|
|
|
+public class CaptchaController extends BaseController {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DefaultKaptcha captchaProducer;
|
|
|
+
|
|
|
+ @RequestMapping(value = UrlConstants.API_COMMON + "captcha")
|
|
|
+ public ModelAndView getKaptchaImage(HttpServletRequest request,
|
|
|
+ HttpServletResponse response) throws Exception {
|
|
|
+
|
|
|
+ response.setDateHeader("Expires", 0);
|
|
|
+ response.setHeader("Cache-Control",
|
|
|
+ "no-store, no-cache, must-revalidate");
|
|
|
+ response.addHeader("Cache-Control", "post-check=0, pre-check=0");
|
|
|
+ response.setHeader("Pragma", "no-cache");
|
|
|
+ response.setContentType("image/jpeg");
|
|
|
+
|
|
|
+ String capText = captchaProducer.createText();
|
|
|
+
|
|
|
+ try {
|
|
|
+ Cookie cookie = new Cookie("captchaCode", EncryptionUtil.encryptMD5Hex(capText));
|
|
|
+ response.addCookie(cookie);
|
|
|
+ } catch (Exception e) {
|
|
|
+ LOG.error("", e);
|
|
|
+ }
|
|
|
+
|
|
|
+ BufferedImage bi = captchaProducer.createImage(capText);
|
|
|
+ ServletOutputStream out = response.getOutputStream();
|
|
|
+ ImageIO.write(bi, "jpg", out);
|
|
|
+ try {
|
|
|
+ out.flush();
|
|
|
+ } finally {
|
|
|
+ out.close();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|