UserService.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package se.cloud.analysis.service;
  2. import jdk.nashorn.internal.objects.Global;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5. import org.springframework.util.StringUtils;
  6. import se.cloud.analysis.dao.UserDao;
  7. import se.cloud.analysis.domain.User;
  8. import se.cloud.analysis.exception.GlobalException;
  9. import se.cloud.analysis.redis.RedisService;
  10. import se.cloud.analysis.redis.UserKey;
  11. import se.cloud.analysis.result.CodeMsg;
  12. import se.cloud.analysis.utils.MD5Util;
  13. import se.cloud.analysis.utils.SaltUtil;
  14. import se.cloud.analysis.utils.UUIDUtil;
  15. import se.cloud.analysis.vo.InformationVO;
  16. import se.cloud.analysis.vo.LoginVO;
  17. import se.cloud.analysis.vo.RegisterVO;
  18. import sun.security.provider.MD5;
  19. import javax.servlet.http.Cookie;
  20. import javax.servlet.http.HttpServletResponse;
  21. @Service
  22. public class UserService {
  23. @Autowired
  24. private UserDao userDao;
  25. @Autowired
  26. private RedisService redisService;
  27. public static final String COOKIE_NAME_TOKEN = "se_education_cloud_data_analysis_token";
  28. public User getUserByEmail(String email) {
  29. return userDao.getUserByEmail(email);
  30. }
  31. public User getUserByToken(String token) {
  32. return redisService.get(UserKey.getKeyByTokenAndDefaultExpireTime(token).getKey(), User.class);
  33. }
  34. public int updateUser(User user) {
  35. return userDao.updateUser(user);
  36. }
  37. public int delete(String email) {
  38. return userDao.deleteUser(email);
  39. }
  40. public InformationVO getInformationByEmail(String email) {
  41. User user = getUserByEmail(email);
  42. if (user == null) {
  43. throw new GlobalException(CodeMsg.EMAIL_NOT_EXIST);
  44. } else {
  45. return InformationVO.userToInformationVO(user);
  46. }
  47. }
  48. public InformationVO getInformationByToken(String token) {
  49. if (StringUtils.isEmpty(token)) {
  50. throw new GlobalException(CodeMsg.TOKEN_EMPTY);
  51. }
  52. User user = getUserByToken(token);
  53. if (user == null) {
  54. throw new GlobalException(CodeMsg.TOKEN_HAS_EXPIRED);
  55. }
  56. return InformationVO.userToInformationVO(user);
  57. }
  58. public boolean register(RegisterVO registerVO) {
  59. if (registerVO == null) {
  60. throw new GlobalException(CodeMsg.SERVER_ERROR);
  61. }
  62. String email = registerVO.getEmail();
  63. String formPassword = registerVO.getPassword();
  64. String name = registerVO.getName();
  65. if (getUserByEmail(email) != null) {
  66. throw new GlobalException(CodeMsg.USER_ALREADY_EXISTS);
  67. }
  68. User user = new User();
  69. String randomSalt = SaltUtil.generateRandomSalt();
  70. user.setEmail(email);
  71. user.setPassword(MD5Util.formPassToDbPass(formPassword, randomSalt));
  72. user.setName(name);
  73. user.setSalt(randomSalt);
  74. if (userDao.insertUser(user) == 1) {
  75. return true;
  76. } else {
  77. throw new GlobalException(CodeMsg.SERVER_ERROR);
  78. }
  79. }
  80. public boolean login(HttpServletResponse response, LoginVO loginVO) {
  81. if (loginVO == null) {
  82. throw new GlobalException(CodeMsg.SERVER_ERROR);
  83. }
  84. String email = loginVO.getEmail();
  85. String formPass = loginVO.getPassword();
  86. //判断邮箱是否存在
  87. User user = getUserByEmail(email);
  88. if (user == null) {
  89. throw new GlobalException(CodeMsg.EMAIL_NOT_EXIST);
  90. }
  91. //验证密码
  92. String dbPass = user.getPassword();
  93. String dbSalt = user.getSalt();
  94. String calculatePass = MD5Util.formPassToDbPass(formPass, dbSalt);
  95. if (!calculatePass.equals(dbPass)) {
  96. throw new GlobalException(CodeMsg.PASSWORD_ERROR);
  97. }
  98. //生成Cookie
  99. String token = UUIDUtil.uuid();
  100. UserKey redisKey = UserKey.getKeyByTokenAndDefaultExpireTime(token);
  101. redisService.set(redisKey, user);
  102. Cookie cookie = new Cookie(COOKIE_NAME_TOKEN, token);
  103. cookie.setMaxAge(redisKey.getExpireSeconds());
  104. cookie.setPath("/");
  105. response.addCookie(cookie);
  106. return true;
  107. }
  108. }