PersonalRegisterController.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package com.uas.sso.controller;
  2. import com.uas.message.sms.service.SmsService;
  3. import com.uas.sso.core.Const;
  4. import com.uas.sso.core.Type;
  5. import com.uas.sso.core.PasswordStrength;
  6. import com.uas.sso.entity.Setting;
  7. import com.uas.sso.entity.Token;
  8. import com.uas.sso.entity.User;
  9. import com.uas.sso.logging.RegisterBufferedLogger;
  10. import com.uas.sso.service.SettingService;
  11. import com.uas.sso.service.TokenService;
  12. import com.uas.sso.service.UserService;
  13. import com.uas.sso.util.StringUtil;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Controller;
  16. import org.springframework.ui.ModelMap;
  17. import org.springframework.util.StringUtils;
  18. import org.springframework.web.bind.annotation.RequestMapping;
  19. import org.springframework.web.bind.annotation.RequestMethod;
  20. import org.springframework.web.bind.annotation.ResponseBody;
  21. /**
  22. * 个人注册controller
  23. *
  24. * @author uas
  25. * @date 2018/1/2
  26. */
  27. @Controller
  28. @RequestMapping("/sso/personal")
  29. public class PersonalRegisterController extends BaseController {
  30. @Autowired
  31. private UserService userService;
  32. @Autowired
  33. private TokenService tokenService;
  34. @Autowired
  35. private SettingService settingService;
  36. @Autowired
  37. private SmsService smsService;
  38. private RegisterBufferedLogger registerLogger = new RegisterBufferedLogger();
  39. /**
  40. * 注册个人信息
  41. *
  42. * @param user 用户信息(需要会员名,手机号,手机号所属区域,密码)
  43. * @param appId 注册应用标志
  44. * @param code 验证码
  45. * @param token 验证码tokenId
  46. * @return 成功:success(),失败:error("错误码", "错误信息")
  47. */
  48. @RequestMapping(value = "/register", method = RequestMethod.POST)
  49. @ResponseBody
  50. public ModelMap register(User user, String appId, String code, String token) {
  51. // 获取参数
  52. String vipName = user.getVipName();
  53. String mobile = user.getMobile();
  54. String mobileArea = user.getMobileArea();
  55. String password = user.getPassword();
  56. // 参数空校验
  57. if (StringUtils.isEmpty(vipName)) {
  58. return error("400", "会员名不能为空");
  59. }
  60. if (StringUtils.isEmpty(password)) {
  61. return error("400", "密码不能为空");
  62. }
  63. if (StringUtils.isEmpty(mobile)) {
  64. return error("400", "手机号不能为空");
  65. }
  66. // 校验验证码
  67. ModelMap checkResult = checkCode(mobile, code, token);
  68. if (checkResult.get(Const.SUCCESS) == null) {
  69. // 校验不成功,返回校验的错误信息
  70. return checkResult;
  71. }
  72. // 校验手机号
  73. if (Const.CONTINENT.equals(mobileArea)) {
  74. if (!mobile.matches(Const.REGEXP_MOBILE_CONTINENT)) {
  75. return error("400", "请输入正确的手机号格式");
  76. }
  77. } else if (Const.HONGKONG.equals(mobileArea)) {
  78. if (!mobile.matches(Const.REGEXP_MOBILE_HONGKONG)) {
  79. return error("400", "请输入正确的手机号格式");
  80. }
  81. } else {
  82. return error("400", "未找到所选地区");
  83. }
  84. // 校验密码
  85. if (PasswordStrength.WEAK.equals(checkPasswordLevel(password))) {
  86. return error("400", "密码强度过低,请重新输入密码");
  87. }
  88. // 注册
  89. user.setFromApp(StringUtils.isEmpty(appId) ? "sso" : appId);
  90. userService.register(user);
  91. tokenService.delete(token);
  92. registerLogger.info(Type.REGISTER_PERSONAL.getValue(), 1, "个人注册成功", user, user.getFromApp());
  93. return success();
  94. }
  95. /**
  96. * 获取验证码
  97. *
  98. * @param mobile 手机号
  99. * @return success(tokenId)
  100. */
  101. @RequestMapping(value = "/checkCode", method = RequestMethod.GET)
  102. @ResponseBody
  103. public ModelMap getCode(String mobile) {
  104. String code = StringUtil.getRandomNumber(6);
  105. Token token = new Token(code, 10*60);
  106. token.setMobile(mobile);
  107. tokenService.save(token);
  108. ModelMap data = new ModelMap();
  109. data.put("checkcode", code);
  110. request.getSession().setAttribute("token", token.getId());
  111. // 手机短信
  112. try {
  113. if (!StringUtils.isEmpty(mobile)) {
  114. Setting smsTplId = settingService.findOne("templateForSendSmsWhenRegister");
  115. if (!StringUtils.isEmpty(smsTplId)) {
  116. smsService.send(smsTplId.getValue(), mobile, new Object[]{code});
  117. }
  118. }
  119. } catch (Exception e) {
  120. e.printStackTrace();
  121. }
  122. return new ModelMap("token", token.getId());
  123. }
  124. /**
  125. * 校验验证码
  126. *
  127. * @param code 验证码
  128. * @param token 验证码tokenId
  129. * @return 验证成功:success(),验证失败:error("错误信息")
  130. */
  131. @RequestMapping(value = "/checkCode", method = RequestMethod.POST)
  132. @ResponseBody
  133. public ModelMap checkCode(String mobile, String code, String token) {
  134. // 校验参数
  135. if (StringUtils.isEmpty(token) || StringUtils.isEmpty(token)) {
  136. return error("参数错误");
  137. }
  138. Token existToken = tokenService.findOne(token);
  139. if (existToken == null || existToken.isExpired()) {
  140. return error("验证码已经失效,请重新获取");
  141. }
  142. if (StringUtils.isEmpty(mobile) || !mobile.equals(existToken.getMobile())) {
  143. return error("手机号被修改,请重新获取验证码");
  144. }
  145. // 校验验证码
  146. String existCode = existToken.getBind().toString();
  147. if (!code.equals(existCode)) {
  148. return error("验证码错误");
  149. }
  150. return success();
  151. }
  152. }