From 022b17044ab6bb284fd6313da91d1d1dfb2d5079 Mon Sep 17 00:00:00 2001 From: kongzy <kongzy> Date: 星期一, 03 六月 2024 13:20:42 +0800 Subject: [PATCH] update --- assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java | 83 ++++++++++++++++++++++++----------------- 1 files changed, 48 insertions(+), 35 deletions(-) diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java index 41ff653..c0cef63 100644 --- a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java +++ b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.assess.common.api.CommonPage; import com.gkhy.assess.common.constant.CacheConstant; +import com.gkhy.assess.common.domain.CustomerUsernamePasswordToken; import com.gkhy.assess.common.domain.vo.AccountVO; import com.gkhy.assess.common.domain.vo.LoginBody; import com.gkhy.assess.common.enums.AttachTypeEnum; @@ -70,9 +71,13 @@ @Override public AccountVO login(LoginBody loginBody) { + if(loginBody.getIdentity()==null){ + throw new ApiException("请选择登录用户身份"); + } // 验证码校验 validateCaptcha(loginBody.getUsername(), loginBody.getCode(), loginBody.getUuid()); - UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()), false); + // UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()), false); + CustomerUsernamePasswordToken usernamePasswordToken=new CustomerUsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()),loginBody.getIdentity()); Subject subject= SecurityUtils.getSubject(); String msg ; try { @@ -87,9 +92,9 @@ accountVO.setAgentName(agency.getName()); accountVO.setAgentId(agency.getId()); } - String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword()); + String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword(),loginBody.getIdentity()); accountVO.setToken(token); - cacheUserToken(sysUser.getUsername(),token); + cacheUserToken(sysUser.getUsername(),sysUser.getIdentity(),token); return accountVO; }catch (UnknownAccountException | IncorrectCredentialsException uae){ throw new ApiException("用户名/密码错误,请重新输入"); @@ -106,8 +111,9 @@ @Override public AccountVO appLogin(LoginBody loginBody) { - // 验证码校验 - UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()), false); + // app端只能是专家用户登录 + loginBody.setIdentity(UserIdentityEnum.EXPERT.getCode()); + CustomerUsernamePasswordToken usernamePasswordToken = new CustomerUsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()), loginBody.getIdentity()); Subject subject= SecurityUtils.getSubject(); String msg ; try { @@ -122,10 +128,10 @@ accountVO.setAgentName(agency.getName()); accountVO.setAgentId(agency.getId()); } - String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword()); + String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword(),loginBody.getIdentity()); accountVO.setToken(token); - cacheUserToken(sysUser.getUsername(),token); - accountVO.setUserFace(userFaceMapper.getFaceByUserId(sysUser.getId())); + cacheUserToken(sysUser.getUsername(),sysUser.getIdentity(),token); + accountVO.setIdPhoto(sysUser.getIdPhoto()); return accountVO; }catch (UnknownAccountException | IncorrectCredentialsException uae){ throw new ApiException("用户名/密码错误,请重新输入"); @@ -142,9 +148,8 @@ * 清空旧的登录信息,保证同时只有一个用户再登录,后登录用户会挤掉前一个用户 * @param username */ - public void cacheUserToken(String username,String newToken){ - - String userKey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + username); + public void cacheUserToken(String username,Integer identity,String newToken){ + String userKey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + username+"_"+identity); String oldToken = (String) redisUtils.get(userKey); if (StringUtils.isNotBlank(oldToken)) { String oldTokenkey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + JwtTokenUtil.md5Encode(oldToken)); @@ -159,6 +164,7 @@ redisUtils.set(tokenKey,newToken); redisUtils.expire(tokenKey,JwtTokenUtil.EXPIRATION*2/1000); } + /** * 校验验证码 @@ -191,7 +197,8 @@ String jwtToken = request.getHeader(JwtTokenUtil.USER_LOGIN_TOKEN); if(StringUtils.isNotBlank(jwtToken)){ String username=JwtTokenUtil.getUsername(jwtToken); - String userKey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + username); + Integer identity=JwtTokenUtil.getIdentity(jwtToken); + String userKey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + username+"_"+identity); String tokenKey= redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(jwtToken)); //删除redis缓存 redisUtils.del(tokenKey); @@ -238,8 +245,8 @@ } @Override - public SysUser getUserByUsername(String username) { - String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username); + public SysUser getUserByUsername(String username,Integer identity) { + String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME + ":" + username+"_"+identity); SysUser sysUser =null; if(redisUtils.hasKey(key)){ sysUser= (SysUser) redisUtils.get(key); @@ -250,19 +257,20 @@ return sysUser; } - public void delCacheByUsername(String username){ - String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username); + @Override + public void delCacheByUsername(String username,Integer identity){ + String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username+"_"+identity); redisUtils.del(key); } @Override - public SysUser getUserByUsernamePhone(String username) { - String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username); + public SysUser getUserByUsernamePhone(String username,Integer identity) { + String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username+"_"+identity); SysUser sysUser =null; if(redisUtils.hasKey(key)){ sysUser= (SysUser) redisUtils.get(key); }else { - sysUser = baseMapper.getUserByUsernamePhone(username); + sysUser = baseMapper.getUserByUsernamePhone(username,identity); redisUtils.set(key,sysUser,10*60); } return sysUser; @@ -280,7 +288,7 @@ if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){ throw new ApiException("用户名已存在"); } - if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()))){ + if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()).setIdentity(UserIdentityEnum.MONITOR.getCode()))){ throw new ApiException("手机号已存在"); } String originPsword=Base64.decodeStr(user.getPassword()); @@ -303,7 +311,7 @@ if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){ throw new ApiException("用户名已存在"); } - if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()))){ + if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()).setIdentity(UserIdentityEnum.AGENCY.getCode()))){ throw new ApiException("手机号已存在"); } String originPsword=Base64.decodeStr(user.getPassword()); @@ -317,15 +325,17 @@ if(!agencyService.checkAgencyNameUnique(new SysAgency().setName(agency.getName()))){ throw new ApiException("机构名称已存在"); } - agency.setCreateBy(ShiroUtils.getSysUser().getUsername()); + agency.setCreateBy(ShiroUtils.getSysUser()!=null?ShiroUtils.getSysUser().getUsername():""); boolean b=agencyService.save(agency); if(!b){ throw new ApiException("保存机构信息失败"); } + + //创建机构用户 user.setIdentity(UserIdentityEnum.AGENCY.getCode()); user.setAgencyId(agency.getId()); user.setPassword(JwtTokenUtil.encryptPassword(user.getUsername(),originPsword,user.getSalt())); - user.setCreateBy(ShiroUtils.getSysUser().getUsername()); + user.setCreateBy(ShiroUtils.getSysUser()!=null?ShiroUtils.getSysUser().getUsername():""); b=save(user); if(!b){ throw new ApiException("创建机构用户信息失败"); @@ -342,7 +352,7 @@ if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){ throw new ApiException("用户名已存在"); } - if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()))){ + if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()).setIdentity(UserIdentityEnum.EXPERT.getCode()))){ throw new ApiException("手机号已存在"); } String major=user.getMajor(); @@ -424,7 +434,7 @@ agencyService.updateById(agency); } } - delCacheByUsername(user.getUsername()); + delCacheByUsername(user.getUsername(),user.getIdentity()); user=new SysUser().setId(userId); user.setUpdateBy(ShiroUtils.getSysUser().getUsername()); user.setDelFlag(DeleteFlagEnum.DELETED.getCode()); @@ -437,10 +447,10 @@ if(!checkUsernameUnique(user)){ throw new ApiException("用户名已存在"); } - if(!checkPhoneUnique(user)){ + if(!checkPhoneUnique(user.setIdentity(UserIdentityEnum.MONITOR.getCode()))){ throw new ApiException("手机号已存在"); } - delCacheByUsername(user.getUsername()); + delCacheByUsername(user.getUsername(),UserIdentityEnum.MONITOR.getCode()); user.setPassword(null); user.setUpdateBy(ShiroUtils.getSysUser().getUsername()); boolean b=updateById(user); @@ -458,7 +468,7 @@ if(!checkUsernameUnique(user)){ throw new ApiException("用户名已存在"); } - if(!checkPhoneUnique(user)){ + if(!checkPhoneUnique(user.setIdentity(UserIdentityEnum.AGENCY.getCode()))){ throw new ApiException("手机号已存在"); } SysAgency agency=user.getAgency(); @@ -471,7 +481,7 @@ throw new ApiException("机构名称已存在"); } - delCacheByUsername(user.getUsername()); + delCacheByUsername(user.getUsername(),UserIdentityEnum.AGENCY.getCode()); agency.setUpdateBy(ShiroUtils.getSysUser().getUsername()); agencyService.updateById(agency); user.setPassword(null); @@ -490,7 +500,7 @@ if(!checkUsernameUnique(user)){ throw new ApiException("用户名已存在"); } - if(!checkPhoneUnique(user)){ + if(!checkPhoneUnique(user.setIdentity(UserIdentityEnum.EXPERT.getCode()))){ throw new ApiException("手机号已存在"); } String major=user.getMajor(); @@ -542,7 +552,7 @@ if(!delIds.isEmpty()){ attachService.deleteAttachsByIds(delIds); } - delCacheByUsername(user.getUsername()); + delCacheByUsername(user.getUsername(),UserIdentityEnum.EXPERT.getCode()); return row; } @@ -554,7 +564,7 @@ SysUser oldUser=checkUserDataScope(user.getId()); SysUser newUser=new SysUser().setId(user.getId()).setPassword(JwtTokenUtil.encryptPassword(oldUser.getUsername(),originPsword,oldUser.getSalt())); newUser.setUpdateBy(ShiroUtils.getSysUser().getUsername()); - delCacheByUsername(oldUser.getUsername()); + delCacheByUsername(oldUser.getUsername(),oldUser.getIdentity()); return updateById(newUser); } @@ -571,8 +581,11 @@ @Override public boolean checkPhoneUnique(SysUser user) { + if(user.getIdentity()==null){ + throw new ApiException("用户身份不能为空"); + } Long userId = user.getId()==null ? -1L : user.getId(); - SysUser info = baseMapper.checkPhoneUnique(user.getPhone()); + SysUser info = baseMapper.checkPhoneUnique(user.getPhone(),user.getIdentity()); if (info!=null && info.getId().longValue() != userId.longValue()) { return false; @@ -625,7 +638,7 @@ SysUser existUser=checkUserDataScope(user.getId()); SysUser su=new SysUser().setId(user.getId()).setStatus(user.getStatus()); su.setUpdateBy(ShiroUtils.getSysUser().getUsername()); - delCacheByUsername(existUser.getUsername()); + delCacheByUsername(existUser.getUsername(),existUser.getIdentity()); return updateById(su); } @@ -634,7 +647,7 @@ SysUser existUser=checkUserDataScope(user.getId()); SysUser su=new SysUser().setId(user.getId()).setState(user.getState()); su.setUpdateBy(ShiroUtils.getSysUser().getUsername()); - delCacheByUsername(existUser.getUsername()); + delCacheByUsername(existUser.getUsername(),existUser.getIdentity()); return updateById(su); } } -- Gitblit v1.9.2