package com.lf.server.service.sys; import com.lf.server.entity.all.RedisCacheKey; import com.lf.server.entity.all.SettingData; import com.lf.server.entity.sys.UserEntity; import com.lf.server.helper.Md5Helper; import com.lf.server.helper.RsaHelper; import com.lf.server.helper.StringHelper; import com.lf.server.mapper.sys.UserMapper; import com.lf.server.service.all.RedisService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.cache.RedisCache; import org.springframework.stereotype.Service; import java.util.List; import java.util.concurrent.TimeUnit; /** * 用户表 * @author sws * @date 2022-09-27 */ @Service public class UserService implements UserMapper { @Autowired UserMapper userMapper; @Autowired RedisService redisService; @Override public Integer selectCount(String uname) { uname = StringHelper.getLikeStr(uname); return userMapper.selectCount(uname); } @Override public UserEntity selectUser(int id) { return userMapper.selectUser(id); } @Override public UserEntity selectByUid(String uid) { return userMapper.selectByUid(uid); } @Override public List selectUserAll() { return userMapper.selectUserAll(); } @Override public List selectByPage(String uname, Integer limit, Integer offset) { uname = StringHelper.getLikeStr(uname); return userMapper.selectByPage(uname, limit, offset); } @Override public UserEntity selectByToken(String token) { return userMapper.selectByToken(token); } @Override public Integer insertUser(UserEntity userEntity) { return userMapper.insertUser(userEntity); } @Override public Integer insertUsers(List userEntity) { return userMapper.insertUsers(userEntity); } @Override public Integer deleteUser(int id) { return userMapper.deleteUser(id); } @Override public Integer deleteUsers(List ids) { return userMapper.deleteUsers(ids); } @Override public Integer updateUsers(UserEntity userEntity) { return userMapper.updateUsers(userEntity); } @Override public Integer selectCountForRole(String uname, Integer roleid, Integer depid) { uname = StringHelper.getLikeStr(uname); return userMapper.selectCountForRole(uname, roleid, depid); } @Override public List selectByPageForRole(String uname, Integer roleid, Integer depid, Integer limit, Integer offset) { uname = StringHelper.getLikeStr(uname); return userMapper.selectByPageForRole(uname, roleid, depid, limit, offset); } @Override public Integer updateUsersPwd(Integer updateUser, String pwd, List ids) { return userMapper.updateUsersPwd(updateUser, pwd, ids); } /** * 验证新用户密码 */ public String validateNewPwd(UserEntity entity) { if (entity == null) { return "没有找到用户"; } if (StringHelper.isEmpty(entity.getPwd())) { return "密码不能为空"; } try { String pwd = RsaHelper.decrypt(entity.getPwd()); if (!StringHelper.checkPwdValid(pwd)) { return "密码不符合要求"; } String newPwd = Md5Helper.reverse(Md5Helper.generate(pwd)); entity.setPwd(newPwd); return null; } catch (Exception ex) { return "密码解密失败"; } } /** * 验证老用户密码 */ public String validateOldPwd(UserEntity entity) { if (entity == null) { return "没有找到用户"; } if (StringHelper.isEmpty(entity.getPwd())) { return "用户密码不能为空"; } try { String pwd = RsaHelper.decrypt(entity.getPwd()); String salt = RsaHelper.decrypt(entity.getSalt()); UserEntity ue = selectUser(entity.getId()); if (ue == null) { return "没有找到用户"; } if (!Md5Helper.validatePassword(pwd, ue.getPwd())) { // return "旧密码输入错误"; } if (!StringHelper.checkPwdValid(salt)) { return "密码不符合要求"; } String newPwd = Md5Helper.reverse(Md5Helper.generate(salt)); entity.setPwd(newPwd); entity.setSalt(null); return null; } catch (Exception ex) { return "密码解密失败"; } } /** * 验证管理员密码 */ public String validateAdminPwd(UserEntity ue, String adminPwd) { if (ue == null) { return "没有登录或超时"; } if (StringHelper.isEmpty(adminPwd)) { return "管理员密码不能为空"; } try { String pwd = RsaHelper.decrypt(adminPwd); if (!Md5Helper.validatePassword(pwd, ue.getPwd())) { return "管理员密码不正确"; } return null; } catch (Exception ex) { return "密码解密失败"; } } /** * 验证新密码 */ public String validateNewPwd(UserEntity ue, String newPwd) { if (StringHelper.isEmpty(newPwd)) { return "新密码不能为空"; } try { String pwd = RsaHelper.decrypt(newPwd); if (!StringHelper.checkPwdValid(pwd)) { return "密码不符合要求"; } String dbPwd = Md5Helper.reverse(Md5Helper.generate(pwd)); ue.setSalt(dbPwd); return null; } catch (Exception ex) { return "密码解密失败"; } } /** * 设置密码错误缓存 * * @param ue */ public void setPwdErrCache(UserEntity ue) { String key = RedisCacheKey.signPwdError(ue.getUid()); Object objCount = redisService.get(key); int count = objCount == null ? 1 : (int) objCount + 1; redisService.put(key, count, SettingData.PWD_ERR_TIME, TimeUnit.MINUTES); } }