first commit
This commit is contained in:
@ -52,5 +52,12 @@ public interface OnlineUserService {
|
||||
*/
|
||||
List<OnlineUser> selectList(String username);
|
||||
|
||||
|
||||
/**
|
||||
* 检查设备是否是最新登陆的设备
|
||||
*
|
||||
* @param username username
|
||||
* @param deviceSn deviceSn
|
||||
* @return 结果
|
||||
*/
|
||||
Boolean checkIsLastLogged(String username, String deviceSn);
|
||||
}
|
||||
|
@ -1,15 +1,18 @@
|
||||
package com.qiaoba.auth.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.qiaoba.api.auth.service.SysUserDetailsApiService;
|
||||
import com.qiaoba.auth.constants.SecurityConstant;
|
||||
import com.qiaoba.auth.entity.OnlineUser;
|
||||
import com.qiaoba.auth.service.OnlineUserService;
|
||||
import com.qiaoba.auth.utils.TokenUtil;
|
||||
import com.qiaoba.common.base.constants.BaseConstant;
|
||||
import com.qiaoba.common.redis.service.RedisService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -24,29 +27,34 @@ import java.util.List;
|
||||
public class OnlineUserServiceImpl implements OnlineUserService {
|
||||
|
||||
private final RedisService redisService;
|
||||
private final SysUserDetailsApiService sysUserDetailsApiService;
|
||||
|
||||
@Override
|
||||
public void insert(OnlineUser onlineUser) {
|
||||
// key: username
|
||||
// hashKey: deviceSn
|
||||
// key: username:deviceSn
|
||||
// value: onlineUser
|
||||
redisService.hSet(handleKey(onlineUser.getUsername()), onlineUser.getDeviceSn(), onlineUser, TokenUtil.expireTime * 3600);
|
||||
redisService.set(handleKey(onlineUser.getUsername(), onlineUser.getDeviceSn()), onlineUser, TokenUtil.expireTime * 3600);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteOne(String username, String deviceSn) {
|
||||
redisService.hDel(handleKey(username), deviceSn);
|
||||
if (deviceSn.equals(redisService.get(SecurityConstant.LOGGED_USER_REDIS_KEY + username))) {
|
||||
redisService.del(SecurityConstant.LOGGED_USER_REDIS_KEY + username);
|
||||
}
|
||||
sysUserDetailsApiService.deleteCache(username, deviceSn);
|
||||
redisService.del(handleKey(username, deviceSn));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteAll(String username) {
|
||||
redisService.del(handleKey(username));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public OnlineUser selectOne(String username, String deviceSn) {
|
||||
if (redisService.hHasKey(username, deviceSn)) {
|
||||
return redisService.hGetObject(username, deviceSn, OnlineUser.class);
|
||||
String key = handleKey(username, deviceSn);
|
||||
if (redisService.hasKey(key)) {
|
||||
return redisService.getObject(key, OnlineUser.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -58,13 +66,22 @@ public class OnlineUserServiceImpl implements OnlineUserService {
|
||||
key = key + username + "*";
|
||||
}
|
||||
|
||||
if (redisService.hasKey(key)) {
|
||||
return redisService.getObjectList(key, OnlineUser.class);
|
||||
List<OnlineUser> users = new ArrayList<>();
|
||||
Collection<String> keys = redisService.getKeys(key);
|
||||
for (String temp : keys) {
|
||||
temp = temp.replace("tenant_1:", "");
|
||||
users.add(redisService.getObject(temp, OnlineUser.class));
|
||||
}
|
||||
return Collections.emptyList();
|
||||
return users;
|
||||
}
|
||||
|
||||
private String handleKey(String key) {
|
||||
return SecurityConstant.ONLINE_USER_REDIS_KEY + key;
|
||||
@Override
|
||||
public Boolean checkIsLastLogged(String username, String deviceSn) {
|
||||
String loggedDevice = redisService.get(SecurityConstant.LOGGED_USER_REDIS_KEY + username).toString();
|
||||
return deviceSn.equals(loggedDevice);
|
||||
}
|
||||
|
||||
private String handleKey(String key, String deviceSn) {
|
||||
return SecurityConstant.ONLINE_USER_REDIS_KEY + key + BaseConstant.COLON_JOIN_STR + deviceSn;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user