SysRegisterService.java 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package com.ruoyi.system.service;
  2. import cn.dev33.satoken.secure.BCrypt;
  3. import com.ruoyi.common.constant.CacheConstants;
  4. import com.ruoyi.common.constant.Constants;
  5. import com.ruoyi.common.constant.UserConstants;
  6. import com.ruoyi.common.core.domain.entity.SysUser;
  7. import com.ruoyi.common.core.domain.model.RegisterBody;
  8. import com.ruoyi.common.core.service.LogininforService;
  9. import com.ruoyi.common.enums.UserType;
  10. import com.ruoyi.common.exception.user.CaptchaException;
  11. import com.ruoyi.common.exception.user.CaptchaExpireException;
  12. import com.ruoyi.common.exception.user.UserException;
  13. import com.ruoyi.common.utils.MessageUtils;
  14. import com.ruoyi.common.utils.ServletUtils;
  15. import com.ruoyi.common.utils.StringUtils;
  16. import com.ruoyi.common.utils.redis.RedisUtils;
  17. import lombok.RequiredArgsConstructor;
  18. import org.springframework.stereotype.Service;
  19. import javax.servlet.http.HttpServletRequest;
  20. /**
  21. * 注册校验方法
  22. *
  23. * @author Lion Li
  24. */
  25. @RequiredArgsConstructor
  26. @Service
  27. public class SysRegisterService {
  28. private final ISysUserService userService;
  29. private final ISysConfigService configService;
  30. private final LogininforService asyncService;
  31. /**
  32. * 注册
  33. */
  34. public void register(RegisterBody registerBody) {
  35. HttpServletRequest request = ServletUtils.getRequest();
  36. String username = registerBody.getUsername();
  37. String password = registerBody.getPassword();
  38. // 校验用户类型是否存在
  39. String userType = UserType.getUserType(registerBody.getUserType()).getUserType();
  40. boolean captchaOnOff = configService.selectCaptchaOnOff();
  41. // 验证码开关
  42. if (captchaOnOff) {
  43. validateCaptcha(username, registerBody.getCode(), registerBody.getUuid(), request);
  44. }
  45. if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(username))) {
  46. throw new UserException("user.register.save.error", username);
  47. }
  48. SysUser sysUser = new SysUser();
  49. sysUser.setUserName(username);
  50. sysUser.setNickName(username);
  51. sysUser.setPassword(BCrypt.hashpw(password));
  52. sysUser.setUserType(userType);
  53. boolean regFlag = userService.registerUser(sysUser);
  54. if (!regFlag) {
  55. throw new UserException("user.register.error");
  56. }
  57. asyncService.recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.register.success"), request);
  58. }
  59. /**
  60. * 校验验证码
  61. *
  62. * @param username 用户名
  63. * @param code 验证码
  64. * @param uuid 唯一标识
  65. * @return 结果
  66. */
  67. public void validateCaptcha(String username, String code, String uuid, HttpServletRequest request) {
  68. String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.defaultString(uuid, "");
  69. String captcha = RedisUtils.getCacheObject(verifyKey);
  70. RedisUtils.deleteObject(verifyKey);
  71. if (captcha == null) {
  72. asyncService.recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.jcaptcha.expire"), request);
  73. throw new CaptchaExpireException();
  74. }
  75. if (!code.equalsIgnoreCase(captcha)) {
  76. asyncService.recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.jcaptcha.error"), request);
  77. throw new CaptchaException();
  78. }
  79. }
  80. }