From a44f07962db12990bd63a9afec01a13120e4b76d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=80=A1?= Date: Mon, 16 Jun 2025 09:13:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=99=BB=E5=BD=95=E5=90=8E?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=AD=98redis=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/BaseUserServiceImpl.java | 126 +++++++++++------- 1 file changed, 75 insertions(+), 51 deletions(-) diff --git a/src/main/java/com/chinaunicom/mall/ebtp/login/service/impl/BaseUserServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/login/service/impl/BaseUserServiceImpl.java index b3358f3..22da14d 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/login/service/impl/BaseUserServiceImpl.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/login/service/impl/BaseUserServiceImpl.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.chinaunicom.mall.ebtp.cloud.security.starter.entity.AuthorityEntity; import com.chinaunicom.mall.ebtp.cloud.security.starter.entity.SecurityEntity; +import com.chinaunicom.mall.ebtp.cloud.userinfo.starter.service.UserInfoService; import com.chinaunicom.mall.ebtp.common.base.entity.BaseCacheUser; import com.chinaunicom.mall.ebtp.common.base.service.IBaseCacheUserService; import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl; @@ -43,10 +44,12 @@ import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import static com.chinaunicom.mall.ebtp.cloud.security.starter.common.Constants.REDIS_USER_KEY; + /** * 对数据表 base_user 操作的 serviceImpl - * @author yss * + * @author yss */ @Slf4j @Service @@ -66,22 +69,29 @@ public class BaseUserServiceImpl extends BaseServiceImpl redisTemplate; + @Autowired(required = false) + @Qualifier("userinfoRedisTemplate") + private RedisTemplate userinfoRedisTemplate; + @Override public BaseSelf idcardLogin(String account, String password) { try { - List userList = this.list(new LambdaQueryWrapper().eq(SysUser::getEmployeeNumber, account).eq(SysUser::getStatus,Integer.parseInt(Constants.USER_STATUS_LIVE))); - if (userList == null||userList.size()==0) { + List userList = this.list(new LambdaQueryWrapper().eq(SysUser::getEmployeeNumber, account).eq(SysUser::getStatus, Integer.parseInt(Constants.USER_STATUS_LIVE))); + if (userList == null || userList.size() == 0) { throw new RuntimeException("无效用户!"); } SysUser user = userList.get(0); - if(Constants.USER_STATUS_FREEZE.equals(user.getStatus().toString())){ + if (Constants.USER_STATUS_FREEZE.equals(user.getStatus().toString())) { throw new RuntimeException("账号已冻结!"); } @@ -94,13 +104,25 @@ public class BaseUserServiceImpl extends BaseServiceImpl tokenList = baseUserTokenService.list((new LambdaQueryWrapper().eq(BaseUserToken::getUserId,userId) - .gt(BaseUserToken::getValidTime, LocalDateTime.now()).eq(BaseUserToken::getState,Constants.USER_TOKEN_STATUS_E).orderByDesc(BaseUserToken::getValidTime))); - String token = UUID.randomUUID().toString(); - BaseUserToken tokenObj = new BaseUserToken(); - if(tokenList!=null&&tokenList.size()>0){ - tokenObj = tokenList.get(0); - token = tokenObj.getToken(); - }else{ - tokenObj.setUserId(userId); - tokenObj.setToken(token); - tokenObj.setState(Constants.USER_TOKEN_STATUS_E); - tokenObj.setCreateTime(LocalDateTime.now()); - } + List tokenList = baseUserTokenService.list((new LambdaQueryWrapper().eq(BaseUserToken::getUserId, userId) + .gt(BaseUserToken::getValidTime, LocalDateTime.now()).eq(BaseUserToken::getState, Constants.USER_TOKEN_STATUS_E).orderByDesc(BaseUserToken::getValidTime))); + String token = UUID.randomUUID().toString(); + BaseUserToken tokenObj = new BaseUserToken(); + if (tokenList != null && tokenList.size() > 0) { + tokenObj = tokenList.get(0); + token = tokenObj.getToken(); + } else { + tokenObj.setUserId(userId); + tokenObj.setToken(token); + tokenObj.setState(Constants.USER_TOKEN_STATUS_E); + tokenObj.setCreateTime(LocalDateTime.now()); + } SecurityEntity securityEntity = getUserObjectByUserId(userId); tokenObj.setUserObject(JSONObject.toJSONString(securityEntity)); baseUserTokenService.refreshToken(tokenObj); - return token; + return token; } @Override - public void setCookie(HttpServletResponse response,String name, String value) { + public void setCookie(HttpServletResponse response, String name, String value) { Cookie cookie = new Cookie(name, value); cookie.setPath("/"); cookie.setMaxAge(-1); @@ -189,29 +211,29 @@ public class BaseUserServiceImpl extends BaseServiceImpl baseUserList = this.list((new LambdaQueryWrapper().eq(SysUser::getEmployeeNumber,user.getUserId()))); - if(baseUserList!=null&&baseUserList.size()>0){ + CommonExceptionEnum.LOGIN_EXPIRATION.customValidName("无认证信息", "".equals(token)); + if (redisTemplate.hasKey(token)) { + self = (BaseSelf) redisTemplate.opsForValue().get(token); + redisTemplate.expire(token, 15, TimeUnit.MINUTES); + } else { + BaseCacheUser user = iBaseCacheUserService.getCacheUser(); + CommonExceptionEnum.LOGIN_EXPIRATION.customValidName("账号不存在", user == null || StringUtils.isBlank(user.getUserId())); + List baseUserList = this.list((new LambdaQueryWrapper().eq(SysUser::getEmployeeNumber, user.getUserId()))); + if (baseUserList != null && baseUserList.size() > 0) { self = userLogin(baseUserList.get(0)); self.setToken(token); - redisTemplate.opsForValue().getAndSet(token,self); - redisTemplate.expire(token,15, TimeUnit.MINUTES); + redisTemplate.opsForValue().getAndSet(token, self); + redisTemplate.expire(token, 15, TimeUnit.MINUTES); } } - }catch (Exception e){ - log.error("用户账号异常:{}",e); - CommonExceptionEnum.LOGIN_EXPIRATION.customValidName("用户账号异常:请重新登陆!",true); + } catch (Exception e) { + log.error("用户账号异常:{}", e); + CommonExceptionEnum.LOGIN_EXPIRATION.customValidName("用户账号异常:请重新登陆!", true); } return self; } - public SecurityEntity getUserObjectByUserId(String userId){ + public SecurityEntity getUserObjectByUserId(String userId) { SecurityEntity securityEntity = new SecurityEntity(); SysUser baseUser = this.baseUserMapper.selectById(userId); @@ -219,23 +241,25 @@ public class BaseUserServiceImpl extends BaseServiceImpl authorityList =this.baseUserMapper.selectRoleByUserId(baseUser.getUserId());; + List authorityList = this.baseUserMapper.selectRoleByUserId(baseUser.getUserId()); + ; securityEntity.setAuthorityList(authorityList); return securityEntity; } /** * 本地token换取用户信息 + * * @param token * @return */ @Override - public SecurityEntity bdCheckToken(String token){ - List tokenList = baseUserTokenService.list((new LambdaQueryWrapper().eq(BaseUserToken::getToken,token) - .gt(BaseUserToken::getValidTime, LocalDateTime.now()).eq(BaseUserToken::getState,Constants.USER_TOKEN_STATUS_E).orderByDesc(BaseUserToken::getValidTime))); - CommonExceptionEnum.LOGIN_EXPIRATION.assertListNotNullByName("",tokenList); + public SecurityEntity bdCheckToken(String token) { + List tokenList = baseUserTokenService.list((new LambdaQueryWrapper().eq(BaseUserToken::getToken, token) + .gt(BaseUserToken::getValidTime, LocalDateTime.now()).eq(BaseUserToken::getState, Constants.USER_TOKEN_STATUS_E).orderByDesc(BaseUserToken::getValidTime))); + CommonExceptionEnum.LOGIN_EXPIRATION.assertListNotNullByName("", tokenList); BaseUserToken userToken = tokenList.get(0); - CommonExceptionEnum.LOGIN_EXPIRATION.assertStringNotNullByKey("",tokenList.get(0).getUserObject()); + CommonExceptionEnum.LOGIN_EXPIRATION.assertStringNotNullByKey("", tokenList.get(0).getUserObject()); SecurityEntity securityEntity = JSON.parseObject(userToken.getUserObject(), SecurityEntity.class); userToken.setValidTime(LocalDateTime.now().plusMinutes(Long.valueOf(valid_time_limit))); @@ -248,9 +272,9 @@ public class BaseUserServiceImpl extends BaseServiceImpl