UserServiceImpl.java 3.9 KB

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