| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- package com.uas.sso.service.impl;
- import com.uas.sso.common.encrypt.MD5;
- import com.uas.sso.core.Const;
- import com.uas.sso.core.Status;
- import com.uas.sso.core.Type;
- import com.uas.sso.dao.UserDao;
- import com.uas.sso.entity.User;
- import com.uas.sso.exception.VisibleError;
- import com.uas.sso.logging.UserBufferedLogger;
- import com.uas.sso.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.util.StringUtils;
- import com.uas.sso.exception.AccountException;
- import java.sql.Timestamp;
- /**
- * 用户service实现类
- *
- * @author wangmh
- * @date 2018/1/2
- */
- @Service
- public class UserServiceImpl implements UserService {
- @Autowired
- private UserDao userDao;
- private UserBufferedLogger userLog = new UserBufferedLogger();
- @Override
- public User findByMobile(String mobile, String mobileArea) {
- return userDao.findByMobileAndMobileArea(mobile, mobileArea);
- }
- @Override
- public User findByMobile(String mobile) {
- return userDao.findByMobile(mobile);
- }
- @Override
- public boolean mobileHasRegistered(String mobile) {
- User user = userDao.findByMobile(mobile);
- if (user == null) {
- return false;
- }
- return true;
- }
- @Override
- public User register(User user) {
- // 校验手机号是否被注册
- if (mobileHasRegistered(user.getMobile())) {
- throw new VisibleError("该手机号已被注册");
- }
- // 由于现在不考虑手机号所属区域,默认为中国大陆
- if (StringUtils.isEmpty(user.getMobileArea())) {
- user.setMobileArea(Const.CONTINENT);
- }
- // 设置基本属性,手机号默认已认证
- user.setRegisterDate(new Timestamp(System.currentTimeMillis()));
- Long uu = userDao.findMaxUU();
- user.setUserUU(uu == null ? 10000 : (uu + 1));
- user.setSalt(String.valueOf(user.getUserUU()));
- user.setMobileIsValid((short) Status.AUTHENTICATED.getCode());
- user.setEmailIsValid((short) Status.NOT_APPLYING.getCode());
- user.setIdentityIsValid((short) Status.NOT_APPLYING.getCode());
- user.setPassword(getEncryPassword(Const.ENCRY_FORMAT, user.getPassword(), user.getSalt()));
- userDao.save(user);
- userLog.info(user, Type.UPDATE_REGISTER.getValue());
- return user;
- }
- @Override
- public String getEncryPassword(String format, String noEncryPwd, String salt) {
- if (StringUtils.isEmpty(format)) {
- return noEncryPwd;
- }
- // 超过32认为是已加密过的密文
- if (noEncryPwd.length() >= 32) {
- /// 之后添加日志时恢复
- //logger.error("用户密码加密", String.format("传递过来的密码(%s)必须是未加密的明文", noEncryPwd));
- throw new AccountException("invalid password");
- }
- // $password{$salt}
- String password = format.replace(Const.ENCRY_PARAM_PASSWORD, noEncryPwd);
- password = password.replace(Const.ENCRY_PARAM_SALT, salt == null ? "" : salt);
- return MD5.toMD5(password);
- }
- @Override
- public User save(User user) {
- return userDao.save(user);
- }
- @Override
- public void checkPassword(Long userUU, String password, boolean isEncry) {
- // 根据用户uu号找到旧数据
- User oldUser = userDao.findByUserUU(userUU);
- if (oldUser == null) {
- throw new VisibleError("该用户不存在");
- }
- // 密码未加密,转换成加密后的密码
- String encryPassword = password;
- if (!isEncry) {
- encryPassword = getEncryPassword(Const.ENCRY_FORMAT, password, oldUser.getSalt());
- }
- // 校验密码
- if (!encryPassword.equals(password)) {
- throw new VisibleError("密码不一致");
- }
- }
- }
|