UserServiceImpl.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package com.uas.sso.service.impl;
  2. import com.uas.sso.common.encrypt.MD5;
  3. import com.uas.sso.core.Const;
  4. import com.uas.sso.core.Status;
  5. import com.uas.sso.core.Type;
  6. import com.uas.sso.dao.UserDao;
  7. import com.uas.sso.entity.User;
  8. import com.uas.sso.exception.VisibleError;
  9. import com.uas.sso.logging.UserBufferedLogger;
  10. import com.uas.sso.service.UserService;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import org.springframework.util.StringUtils;
  14. import com.uas.sso.exception.AccountException;
  15. import java.sql.Timestamp;
  16. /**
  17. * 用户service实现类
  18. *
  19. * @author wangmh
  20. * @date 2018/1/2
  21. */
  22. @Service
  23. public class UserServiceImpl implements UserService {
  24. @Autowired
  25. private UserDao userDao;
  26. private UserBufferedLogger userLog = new UserBufferedLogger();
  27. @Override
  28. public User findByMobile(String mobile, String mobileArea) {
  29. return userDao.findByMobileAndMobileArea(mobile, mobileArea);
  30. }
  31. @Override
  32. public User findByMobile(String mobile) {
  33. return userDao.findByMobile(mobile);
  34. }
  35. @Override
  36. public boolean mobileHasRegistered(String mobile) {
  37. User user = userDao.findByMobile(mobile);
  38. if (user == null) {
  39. return false;
  40. }
  41. return true;
  42. }
  43. @Override
  44. public User register(User user) {
  45. // 校验手机号是否被注册
  46. if (mobileHasRegistered(user.getMobile())) {
  47. throw new VisibleError("该手机号已被注册");
  48. }
  49. // 由于现在不考虑手机号所属区域,默认为中国大陆
  50. if (StringUtils.isEmpty(user.getMobileArea())) {
  51. user.setMobileArea(Const.CONTINENT);
  52. }
  53. // 设置基本属性,手机号默认已认证
  54. user.setRegisterDate(new Timestamp(System.currentTimeMillis()));
  55. Long uu = userDao.findMaxUU();
  56. user.setUserUU(uu == null ? 10000 : (uu + 1));
  57. user.setSalt(String.valueOf(user.getUserUU()));
  58. user.setMobileIsValid((short) Status.AUTHENTICATED.getCode());
  59. user.setEmailIsValid((short) Status.NOT_APPLYING.getCode());
  60. user.setIdentityIsValid((short) Status.NOT_APPLYING.getCode());
  61. user.setPassword(getEncryPassword(Const.ENCRY_FORMAT, user.getPassword(), user.getSalt()));
  62. userDao.save(user);
  63. userLog.info(user, Type.UPDATE_REGISTER.getValue());
  64. return user;
  65. }
  66. @Override
  67. public String getEncryPassword(String format, String noEncryPwd, String salt) {
  68. if (StringUtils.isEmpty(format)) {
  69. return noEncryPwd;
  70. }
  71. // 超过32认为是已加密过的密文
  72. if (noEncryPwd.length() >= 32) {
  73. /// 之后添加日志时恢复
  74. //logger.error("用户密码加密", String.format("传递过来的密码(%s)必须是未加密的明文", noEncryPwd));
  75. throw new AccountException("invalid password");
  76. }
  77. // $password{$salt}
  78. String password = format.replace(Const.ENCRY_PARAM_PASSWORD, noEncryPwd);
  79. password = password.replace(Const.ENCRY_PARAM_SALT, salt == null ? "" : salt);
  80. return MD5.toMD5(password);
  81. }
  82. @Override
  83. public User save(User user) {
  84. return userDao.save(user);
  85. }
  86. @Override
  87. public void checkPassword(Long userUU, String password, boolean isEncry) {
  88. // 根据用户uu号找到旧数据
  89. User oldUser = userDao.findByUserUU(userUU);
  90. if (oldUser == null) {
  91. throw new VisibleError("该用户不存在");
  92. }
  93. // 密码未加密,转换成加密后的密码
  94. String encryPassword = password;
  95. if (!isEncry) {
  96. encryPassword = getEncryPassword(Const.ENCRY_FORMAT, password, oldUser.getSalt());
  97. }
  98. // 校验密码
  99. if (!encryPassword.equals(password)) {
  100. throw new VisibleError("密码不一致");
  101. }
  102. }
  103. }