SysLoginController.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package com.kmall.common.controller;
  2. import com.google.code.kaptcha.Constants;
  3. import com.google.code.kaptcha.Producer;
  4. import com.kmall.common.annotation.SysLog;
  5. import com.kmall.common.utils.R;
  6. import com.kmall.common.utils.ShiroUtils;
  7. import com.kmall.common.utils.redis.JedisUtil;
  8. import org.apache.shiro.authc.*;
  9. import org.apache.shiro.crypto.hash.Sha256Hash;
  10. import org.apache.shiro.subject.Subject;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Controller;
  13. import org.springframework.web.bind.annotation.RequestMapping;
  14. import org.springframework.web.bind.annotation.RequestMethod;
  15. import org.springframework.web.bind.annotation.ResponseBody;
  16. import javax.imageio.ImageIO;
  17. import javax.servlet.ServletException;
  18. import javax.servlet.ServletOutputStream;
  19. import javax.servlet.http.HttpServletRequest;
  20. import javax.servlet.http.HttpServletResponse;
  21. import javax.servlet.http.HttpSession;
  22. import java.awt.image.BufferedImage;
  23. import java.io.IOException;
  24. import java.util.HashSet;
  25. import java.util.Set;
  26. /**
  27. * 登录相关
  28. *
  29. * @author Scott
  30. * @email
  31. * @date 2016年11月10日 下午1:15:31
  32. */
  33. @Controller
  34. public class SysLoginController {
  35. @Autowired
  36. private Producer producer;
  37. public static int wsTokenExpireTime = 3600 * 24 * 30;
  38. @RequestMapping("captcha.jpg")
  39. public void captcha(HttpServletResponse response, HttpSession session) throws ServletException, IOException {
  40. response.setHeader("Cache-Control", "no-store, no-cache");
  41. response.setContentType("image/jpeg");
  42. //生成文字验证码
  43. String text = producer.createText();
  44. //生成图片验证码
  45. BufferedImage image = producer.createImage(text);
  46. //保存到shiro session
  47. JedisUtil.set(Constants.KAPTCHA_SESSION_KEY, text, wsTokenExpireTime);
  48. ServletOutputStream out = response.getOutputStream();
  49. ImageIO.write(image, "jpg", out);
  50. }
  51. /**
  52. * 登录
  53. */
  54. @SysLog("登录")
  55. @ResponseBody
  56. @RequestMapping(value = "/sys/login", method = RequestMethod.POST)
  57. public R login(String username, String password, String captcha,HttpSession session) throws IOException {
  58. String kaptcha = (String) JedisUtil.get(Constants.KAPTCHA_SESSION_KEY);
  59. System.out.println(kaptcha);
  60. JedisUtil.del(Constants.KAPTCHA_SESSION_KEY);
  61. if (!captcha.equalsIgnoreCase(kaptcha)) {
  62. return R.error("验证码不正确");
  63. }
  64. try {
  65. Subject subject = ShiroUtils.getSubject();
  66. //sha256加密
  67. password = new Sha256Hash(password).toHex();
  68. UsernamePasswordToken token = new UsernamePasswordToken(username, password);
  69. subject.login(token);
  70. } catch (UnknownAccountException e) {
  71. return R.error(e.getMessage());
  72. } catch (IncorrectCredentialsException e) {
  73. return R.error(e.getMessage());
  74. } catch (LockedAccountException e) {
  75. return R.error(e.getMessage());
  76. } catch (AuthenticationException e) {
  77. return R.error("账户验证失败");
  78. }
  79. Set<String> permsSet = new HashSet<>();
  80. if (null != ShiroUtils.getUserEntity()) {
  81. permsSet = ShiroUtils.getUserEntity().getPermsSet();
  82. }
  83. return R.ok().put("permsSet", permsSet);
  84. }
  85. /**
  86. * 退出
  87. */
  88. @RequestMapping(value = "logout", method = RequestMethod.GET)
  89. public String logout() {
  90. ShiroUtils.logout();
  91. return "redirect:/";
  92. }
  93. }