/**
* 创建令牌
*
* @param loginUser 用户信息
* @return 令牌
*/
public LoginFrontUserVo createToken(LoginFrontUserVo loginUser) {
String token = UUID.randomUUID().toString().replace("-", "");
loginUser.setToken(token);
refreshToken(loginUser);
redisUtil.set(loginUser.getToken(), loginUser.getUser().getId(), Constants.TOKEN_EXPRESS_MINUTES, TimeUnit.MINUTES);
return loginUser;
}
/**
* 刷新令牌有效期
*
* @param loginFrontUser 登录信息
*/
private void refreshToken(LoginFrontUserVo loginFrontUser) {
loginFrontUser.setLoginTime(System.currentTimeMillis());
loginFrontUser.setExpireTime(loginFrontUser.getLoginTime() + FrontTokenComponent.expireTime * FrontTokenComponent.MILLIS_MINUTE);
// 根据uuid将loginUser缓存
String userKey = "";
// 根据当前用户检测是否店铺管理员
List<MerchantEmployee> shopMangerByUserIds = merchantEmployeeService.getShopMangerByUserId(loginFrontUser.getUser().getId());
// 如果是普通用户
if (shopMangerByUserIds.isEmpty()) {
userKey = getNormalUserTokenKey(loginFrontUser.getToken());
loginFrontUser.setToken(RedisConstants.TOKEN_USER_NORMAL_REDIS + loginFrontUser.getToken());
loginFrontUser.setMerchantEmployeeList(null);
}
// 如果是店铺管理员
if (!shopMangerByUserIds.isEmpty()) {
userKey = getShopManagerTokenKey(loginFrontUser.getToken());
loginFrontUser.setToken(RedisConstants.TOKEN_USER_SHOP_MANAGER_REDIS + loginFrontUser.getToken());
List<FrontMerchantEmployeeResponse> currentMerchantList = new ArrayList<>();
shopMangerByUserIds.stream().map(employee -> {
Merchant merchant = merchantService.getByIdException(employee.getMerId());
FrontMerchantEmployeeResponse frEmployee = new FrontMerchantEmployeeResponse();
BeanUtils.copyProperties(employee, frEmployee);
EmployeeMerchantResponse employeeMerchant = new EmployeeMerchantResponse();
BeanUtils.copyProperties(merchant, employeeMerchant);
frEmployee.setCurrentMerchant(employeeMerchant);
currentMerchantList.add(frEmployee);
return employee;
}).collect(Collectors.toList());
loginFrontUser.setMerchantEmployeeList(currentMerchantList);
}
// 缓存用户信息
redisUtil.set(userKey, loginFrontUser, (long) FrontTokenComponent.expireTime, TimeUnit.MINUTES);
}
文件名LoginServiceImpl.java,createToken里调用了refreshToken,两个都redis.set 是不是弄错了,重复set同一个key