添加登录后信息存redis的方法

This commit is contained in:
刘倡
2025-06-16 09:13:00 +08:00
parent 97bb1afa26
commit a44f07962d

View File

@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.AuthorityEntity;
import com.chinaunicom.mall.ebtp.cloud.security.starter.entity.SecurityEntity; 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.entity.BaseCacheUser;
import com.chinaunicom.mall.ebtp.common.base.service.IBaseCacheUserService; import com.chinaunicom.mall.ebtp.common.base.service.IBaseCacheUserService;
import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl; 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.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.chinaunicom.mall.ebtp.cloud.security.starter.common.Constants.REDIS_USER_KEY;
/** /**
* 对数据表 base_user 操作的 serviceImpl * 对数据表 base_user 操作的 serviceImpl
* @author yss
* *
* @author yss
*/ */
@Slf4j @Slf4j
@Service @Service
@ -66,22 +69,29 @@ public class BaseUserServiceImpl extends BaseServiceImpl<BaseUserMapper, SysUser
@Resource @Resource
private BaseUserTokenService baseUserTokenService; private BaseUserTokenService baseUserTokenService;
@Autowired
private UserInfoService userInfoService;
@Autowired(required = false) @Autowired(required = false)
@Qualifier("cacheRedisTemplate") @Qualifier("cacheRedisTemplate")
private RedisTemplate<String, Object> redisTemplate; private RedisTemplate<String, Object> redisTemplate;
@Autowired(required = false)
@Qualifier("userinfoRedisTemplate")
private RedisTemplate<String, Object> userinfoRedisTemplate;
@Override @Override
public BaseSelf idcardLogin(String account, String password) { public BaseSelf idcardLogin(String account, String password) {
try { try {
List<SysUser> userList = this.list(new LambdaQueryWrapper<SysUser>().eq(SysUser::getEmployeeNumber, account).eq(SysUser::getStatus,Integer.parseInt(Constants.USER_STATUS_LIVE))); List<SysUser> userList = this.list(new LambdaQueryWrapper<SysUser>().eq(SysUser::getEmployeeNumber, account).eq(SysUser::getStatus, Integer.parseInt(Constants.USER_STATUS_LIVE)));
if (userList == null||userList.size()==0) { if (userList == null || userList.size() == 0) {
throw new RuntimeException("无效用户!"); throw new RuntimeException("无效用户!");
} }
SysUser user = userList.get(0); 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("账号已冻结!"); throw new RuntimeException("账号已冻结!");
} }
@ -94,13 +104,25 @@ public class BaseUserServiceImpl extends BaseServiceImpl<BaseUserMapper, SysUser
throw new RuntimeException("用户名或密码错误!"); throw new RuntimeException("用户名或密码错误!");
} }
return userLogin(user);
}catch (BadPaddingException e){ BaseSelf baseSelf = userLogin(user);
log.error("RSA解密异常",e); String token = baseSelf.getToken();
CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName("用户名或密码错误",true);
}catch (Exception e){ //缓存用户信息
log.error("登录异常",e); BaseCacheUser baseCacheUser = new BaseCacheUser();
CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName(e.getMessage(),true); BeanUtils.copyProperties(user, baseCacheUser);
//存入缓存redis
userinfoRedisTemplate.opsForValue().set(REDIS_USER_KEY + token,
baseCacheUser, Long.parseLong(valid_time_limit), TimeUnit.HOURS);
userInfoService.getUserInfo(token);
return baseSelf;
} catch (BadPaddingException e) {
log.error("RSA解密异常", e);
CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName("用户名或密码错误", true);
} catch (Exception e) {
log.error("登录异常", e);
CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName(e.getMessage(), true);
} }
return null; return null;
@ -118,16 +140,16 @@ public class BaseUserServiceImpl extends BaseServiceImpl<BaseUserMapper, SysUser
return self; return self;
} }
private String getToken(String userId){ private String getToken(String userId) {
List<BaseUserToken> tokenList = baseUserTokenService.list((new LambdaQueryWrapper<BaseUserToken>().eq(BaseUserToken::getUserId,userId) List<BaseUserToken> tokenList = baseUserTokenService.list((new LambdaQueryWrapper<BaseUserToken>().eq(BaseUserToken::getUserId, userId)
.gt(BaseUserToken::getValidTime, LocalDateTime.now()).eq(BaseUserToken::getState,Constants.USER_TOKEN_STATUS_E).orderByDesc(BaseUserToken::getValidTime))); .gt(BaseUserToken::getValidTime, LocalDateTime.now()).eq(BaseUserToken::getState, Constants.USER_TOKEN_STATUS_E).orderByDesc(BaseUserToken::getValidTime)));
String token = UUID.randomUUID().toString(); String token = UUID.randomUUID().toString();
BaseUserToken tokenObj = new BaseUserToken(); BaseUserToken tokenObj = new BaseUserToken();
if(tokenList!=null&&tokenList.size()>0){ if (tokenList != null && tokenList.size() > 0) {
tokenObj = tokenList.get(0); tokenObj = tokenList.get(0);
token = tokenObj.getToken(); token = tokenObj.getToken();
}else{ } else {
tokenObj.setUserId(userId); tokenObj.setUserId(userId);
tokenObj.setToken(token); tokenObj.setToken(token);
tokenObj.setState(Constants.USER_TOKEN_STATUS_E); tokenObj.setState(Constants.USER_TOKEN_STATUS_E);
@ -141,7 +163,7 @@ public class BaseUserServiceImpl extends BaseServiceImpl<BaseUserMapper, SysUser
} }
@Override @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 cookie = new Cookie(name, value);
cookie.setPath("/"); cookie.setPath("/");
cookie.setMaxAge(-1); cookie.setMaxAge(-1);
@ -189,29 +211,29 @@ public class BaseUserServiceImpl extends BaseServiceImpl<BaseUserMapper, SysUser
String token = request.getHeader("Authorization-exper"); String token = request.getHeader("Authorization-exper");
token = token.replaceAll("Bearer ", ""); token = token.replaceAll("Bearer ", "");
CommonExceptionEnum.LOGIN_EXPIRATION.customValidName("无认证信息","".equals(token)); CommonExceptionEnum.LOGIN_EXPIRATION.customValidName("无认证信息", "".equals(token));
if(redisTemplate.hasKey(token)){ if (redisTemplate.hasKey(token)) {
self=(BaseSelf)redisTemplate.opsForValue().get(token); self = (BaseSelf) redisTemplate.opsForValue().get(token);
redisTemplate.expire(token,15, TimeUnit.MINUTES); redisTemplate.expire(token, 15, TimeUnit.MINUTES);
}else{ } else {
BaseCacheUser user=iBaseCacheUserService.getCacheUser(); BaseCacheUser user = iBaseCacheUserService.getCacheUser();
CommonExceptionEnum.LOGIN_EXPIRATION.customValidName("账号不存在",user==null || StringUtils.isBlank(user.getUserId())); CommonExceptionEnum.LOGIN_EXPIRATION.customValidName("账号不存在", user == null || StringUtils.isBlank(user.getUserId()));
List<SysUser> baseUserList = this.list((new LambdaQueryWrapper<SysUser>().eq(SysUser::getEmployeeNumber,user.getUserId()))); List<SysUser> baseUserList = this.list((new LambdaQueryWrapper<SysUser>().eq(SysUser::getEmployeeNumber, user.getUserId())));
if(baseUserList!=null&&baseUserList.size()>0){ if (baseUserList != null && baseUserList.size() > 0) {
self = userLogin(baseUserList.get(0)); self = userLogin(baseUserList.get(0));
self.setToken(token); self.setToken(token);
redisTemplate.opsForValue().getAndSet(token,self); redisTemplate.opsForValue().getAndSet(token, self);
redisTemplate.expire(token,15, TimeUnit.MINUTES); redisTemplate.expire(token, 15, TimeUnit.MINUTES);
} }
} }
}catch (Exception e){ } catch (Exception e) {
log.error("用户账号异常:{}",e); log.error("用户账号异常:{}", e);
CommonExceptionEnum.LOGIN_EXPIRATION.customValidName("用户账号异常:请重新登陆!",true); CommonExceptionEnum.LOGIN_EXPIRATION.customValidName("用户账号异常:请重新登陆!", true);
} }
return self; return self;
} }
public SecurityEntity getUserObjectByUserId(String userId){ public SecurityEntity getUserObjectByUserId(String userId) {
SecurityEntity securityEntity = new SecurityEntity(); SecurityEntity securityEntity = new SecurityEntity();
SysUser baseUser = this.baseUserMapper.selectById(userId); SysUser baseUser = this.baseUserMapper.selectById(userId);
@ -219,23 +241,25 @@ public class BaseUserServiceImpl extends BaseServiceImpl<BaseUserMapper, SysUser
securityEntity.setStaffId(baseUser.getEmployeeNumber()); securityEntity.setStaffId(baseUser.getEmployeeNumber());
securityEntity.setUsername(baseUser.getName()); securityEntity.setUsername(baseUser.getName());
securityEntity.setStaffName(baseUser.getName()); securityEntity.setStaffName(baseUser.getName());
List<AuthorityEntity> authorityList =this.baseUserMapper.selectRoleByUserId(baseUser.getUserId());; List<AuthorityEntity> authorityList = this.baseUserMapper.selectRoleByUserId(baseUser.getUserId());
;
securityEntity.setAuthorityList(authorityList); securityEntity.setAuthorityList(authorityList);
return securityEntity; return securityEntity;
} }
/** /**
* 本地token换取用户信息 * 本地token换取用户信息
*
* @param token * @param token
* @return * @return
*/ */
@Override @Override
public SecurityEntity bdCheckToken(String token){ public SecurityEntity bdCheckToken(String token) {
List<BaseUserToken> tokenList = baseUserTokenService.list((new LambdaQueryWrapper<BaseUserToken>().eq(BaseUserToken::getToken,token) List<BaseUserToken> tokenList = baseUserTokenService.list((new LambdaQueryWrapper<BaseUserToken>().eq(BaseUserToken::getToken, token)
.gt(BaseUserToken::getValidTime, LocalDateTime.now()).eq(BaseUserToken::getState,Constants.USER_TOKEN_STATUS_E).orderByDesc(BaseUserToken::getValidTime))); .gt(BaseUserToken::getValidTime, LocalDateTime.now()).eq(BaseUserToken::getState, Constants.USER_TOKEN_STATUS_E).orderByDesc(BaseUserToken::getValidTime)));
CommonExceptionEnum.LOGIN_EXPIRATION.assertListNotNullByName("",tokenList); CommonExceptionEnum.LOGIN_EXPIRATION.assertListNotNullByName("", tokenList);
BaseUserToken userToken = tokenList.get(0); 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); SecurityEntity securityEntity = JSON.parseObject(userToken.getUserObject(), SecurityEntity.class);
userToken.setValidTime(LocalDateTime.now().plusMinutes(Long.valueOf(valid_time_limit))); userToken.setValidTime(LocalDateTime.now().plusMinutes(Long.valueOf(valid_time_limit)));
@ -259,7 +283,7 @@ public class BaseUserServiceImpl extends BaseServiceImpl<BaseUserMapper, SysUser
String mm = baseUserService.encode("cosco2025"); String mm = baseUserService.encode("cosco2025");
System.out.println(mm); System.out.println(mm);
String mm2 = RSA.encrypt("cosco2025",publicKey); String mm2 = RSA.encrypt("cosco2025", publicKey);
System.out.println(mm2); System.out.println(mm2);