You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.7 KiB
92 lines
2.7 KiB
package cn.soul2.jyjc.admin.bean;
|
|
|
|
import cn.soul2.jyjc.admin.entity.UserLoginOutDO;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
@Component
|
|
public class UserLoginStatusBean {
|
|
|
|
private ConcurrentHashMap<String, UserLoginOutDO> loginStatusMap = new ConcurrentHashMap<>();
|
|
|
|
/**
|
|
* 缓存登录信息
|
|
*
|
|
* @param token token
|
|
* @param loginOutStatus 登录信息
|
|
*/
|
|
public void login(String token, UserLoginOutDO loginOutStatus) {
|
|
loginStatusMap.put(token, loginOutStatus);
|
|
}
|
|
|
|
/**
|
|
* 从缓存读取登录信息
|
|
*
|
|
* @param token token
|
|
* @return {@link UserLoginOutDO}
|
|
*/
|
|
public UserLoginOutDO getStatus(String token) {
|
|
UserLoginOutDO loginStatus = loginStatusMap.getOrDefault(token, null);
|
|
if (loginStatus.getLapseTime() != null) {
|
|
LocalDateTime now = LocalDateTime.now();
|
|
if (now.isAfter(loginStatus.getLapseTime())) {
|
|
logout(token);
|
|
return null;
|
|
}
|
|
}
|
|
return loginStatus;
|
|
}
|
|
|
|
/**
|
|
* 为key设置登出
|
|
*
|
|
* @param token token
|
|
* @return {@link Boolean}
|
|
*/
|
|
public Boolean logout(String token) {
|
|
if (StringUtils.isNotBlank(token) && loginStatusMap.containsKey(token)) {
|
|
UserLoginOutDO removedUser = loginStatusMap.remove(token);
|
|
// 返回true表示成功登出,返回false表示未成功登出
|
|
return removedUser != null;
|
|
}
|
|
return Boolean.TRUE;
|
|
}
|
|
|
|
public Boolean logoutByUserId(String userId) {
|
|
final String[] targetKey = {null};
|
|
loginStatusMap.forEach((k, v) -> {
|
|
if (targetKey[0] == null && v.getUserId().equals(userId)) {
|
|
targetKey[0] = k;
|
|
}
|
|
});
|
|
return logout(targetKey[0]);
|
|
}
|
|
|
|
public String getTokenByUsername(String username) {
|
|
final String[] token = {null};
|
|
loginStatusMap.forEach((k, v) -> {
|
|
if (token[0] == null && v.getUserName().equals(username)) {
|
|
token[0] = k;
|
|
}
|
|
});
|
|
return token[0];
|
|
}
|
|
|
|
public Boolean containsToken(String token) {
|
|
if (StringUtils.isBlank(token)) {
|
|
return Boolean.FALSE;
|
|
}
|
|
UserLoginOutDO loginStatus = loginStatusMap.getOrDefault(token, null);
|
|
if (loginStatus != null && loginStatus.getLapseTime() != null) {
|
|
LocalDateTime now = LocalDateTime.now();
|
|
if (now.isAfter(loginStatus.getLapseTime())) {
|
|
logout(token);
|
|
}
|
|
}
|
|
return loginStatusMap.containsKey(token);
|
|
}
|
|
|
|
}
|
|
|