CaptchaController.java 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package com.ruoyi.project.system.user.controller;
  2. import java.awt.image.BufferedImage;
  3. import java.io.IOException;
  4. import javax.annotation.Resource;
  5. import javax.imageio.ImageIO;
  6. import javax.servlet.ServletOutputStream;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import javax.servlet.http.HttpSession;
  10. import org.apache.commons.lang3.StringUtils;
  11. import org.springframework.stereotype.Controller;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.ResponseBody;
  14. import org.springframework.web.servlet.ModelAndView;
  15. import com.google.code.kaptcha.Constants;
  16. import com.google.code.kaptcha.Producer;
  17. import com.ruoyi.framework.web.domain.Message;
  18. /**
  19. * 图片验证码(支持算术形式)
  20. * @author ruoyi
  21. */
  22. @Controller
  23. @RequestMapping("/captcha")
  24. public class CaptchaController
  25. {
  26. @Resource(name = "captchaProducer")
  27. private Producer captchaProducer;
  28. @Resource(name = "captchaProducerMath")
  29. private Producer captchaProducerMath;
  30. /**
  31. * 验证码生成
  32. */
  33. @RequestMapping(value = "/captchaImage")
  34. public ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response)
  35. {
  36. ServletOutputStream out = null;
  37. try
  38. {
  39. HttpSession session = request.getSession();
  40. response.setDateHeader("Expires", 0);
  41. response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
  42. response.addHeader("Cache-Control", "post-check=0, pre-check=0");
  43. response.setHeader("Pragma", "no-cache");
  44. response.setContentType("image/jpeg");
  45. String type = request.getParameter("type");
  46. String capStr = null;
  47. String code = null;
  48. BufferedImage bi = null;
  49. if ("math".equals(type))
  50. {
  51. String capText = captchaProducerMath.createText();
  52. capStr = capText.substring(0, capText.lastIndexOf("@"));
  53. code = capText.substring(capText.lastIndexOf("@") + 1);
  54. bi = captchaProducerMath.createImage(capStr);
  55. }
  56. else if ("char".equals(type))
  57. {
  58. capStr = code = captchaProducer.createText();
  59. bi = captchaProducer.createImage(capStr);
  60. }
  61. session.setAttribute(Constants.KAPTCHA_SESSION_KEY, code);
  62. out = response.getOutputStream();
  63. ImageIO.write(bi, "jpg", out);
  64. out.flush();
  65. }
  66. catch (Exception e)
  67. {
  68. e.printStackTrace();
  69. }
  70. finally
  71. {
  72. try
  73. {
  74. if (out != null)
  75. {
  76. out.close();
  77. }
  78. }
  79. catch (IOException e)
  80. {
  81. e.printStackTrace();
  82. }
  83. }
  84. return null;
  85. }
  86. /**
  87. * @Desc 验证码验证
  88. * @param kaptchaCode
  89. * @param request
  90. * @return
  91. * @author YY<2017年10月31日>
  92. */
  93. @RequestMapping("/captchaVerify")
  94. @ResponseBody
  95. public Message captchaVerify(String kaptchaCode, HttpServletRequest request)
  96. {
  97. try
  98. {
  99. HttpSession session = request.getSession();
  100. Object obj = session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
  101. String code = String.valueOf(obj != null ? obj : "");
  102. if (StringUtils.isNotBlank(kaptchaCode) && kaptchaCode.equalsIgnoreCase(code))
  103. {
  104. return Message.success("验证码正确");
  105. }
  106. }
  107. catch (Exception e)
  108. {
  109. e.printStackTrace();
  110. return Message.error("系统错误:" + e.getMessage());
  111. }
  112. return Message.error("验证码错误");
  113. }
  114. }