修改redis的token处理方式
This commit is contained in:
parent
d5b16d2b0d
commit
48beb19ef2
@ -11,9 +11,8 @@ import org.springframework.context.annotation.Primary;
|
|||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ClassName: RedisAppTokenManager
|
* @ClassName: RedisAppTokenManager
|
||||||
@ -32,10 +31,11 @@ public class RedisAppTokenService implements IAppTokenService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AppToken getToken(String token) {
|
public AppToken getToken(String token) {
|
||||||
AppToken appToken = (AppToken) redisTemplate.opsForHash().entries(TOKEN_HASH_KEY).get(token);
|
String tokenKey = TOKEN_HASH_KEY + token;
|
||||||
|
AppToken appToken = (AppToken) redisTemplate.opsForValue().get(tokenKey);
|
||||||
if (appToken != null) {
|
if (appToken != null) {
|
||||||
appToken.setLastTime(System.currentTimeMillis());
|
appToken.setLastTime(System.currentTimeMillis());
|
||||||
redisTemplate.opsForHash().put(TOKEN_HASH_KEY, appToken.getToken(), appToken);
|
redisTemplate.opsForValue().set(tokenKey, appToken, 10, TimeUnit.MINUTES);
|
||||||
}
|
}
|
||||||
return appToken;
|
return appToken;
|
||||||
}
|
}
|
||||||
@ -48,23 +48,25 @@ public class RedisAppTokenService implements IAppTokenService {
|
|||||||
appToken.setLastTime(System.currentTimeMillis());
|
appToken.setLastTime(System.currentTimeMillis());
|
||||||
appToken.setAppTokenUser(appTokenUser);
|
appToken.setAppTokenUser(appTokenUser);
|
||||||
appToken.setUserId(appTokenUser.getId());
|
appToken.setUserId(appTokenUser.getId());
|
||||||
Map<String, AppToken> tokens = redisTemplate.opsForHash().entries(TOKEN_HASH_KEY);
|
|
||||||
for (Map.Entry<String, AppToken> kvs : tokens.entrySet()) {
|
Set<String> keys = redisTemplate.keys(TOKEN_HASH_KEY + "*");
|
||||||
if (StringUtils.equals(appToken.getAppTokenUser().getId(), kvs.getValue().getUserId())) {
|
List<AppToken> existAppTokens = redisTemplate.opsForValue().multiGet(keys);
|
||||||
redisTemplate.opsForHash().delete(TOKEN_HASH_KEY, kvs.getValue().getToken());
|
for (AppToken existAppToken : existAppTokens) {
|
||||||
|
if (StringUtils.equals(appToken.getAppTokenUser().getId(), existAppToken.getUserId())) {
|
||||||
|
redisTemplate.delete(TOKEN_HASH_KEY + existAppToken.getToken());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
redisTemplate.opsForHash().put(TOKEN_HASH_KEY, appToken.getToken(), appToken);
|
redisTemplate.opsForValue().set(TOKEN_HASH_KEY + token, appToken, 10, TimeUnit.MINUTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AppTokenUser> listCurrentUsers() {
|
public List<AppTokenUser> listCurrentUsers() {
|
||||||
List<AppTokenUser> users = new ArrayList<>();
|
List<AppTokenUser> users = new ArrayList<>();
|
||||||
Map<String, AppToken> tokens = redisTemplate.opsForHash().entries(TOKEN_HASH_KEY);
|
Set<String> keys = redisTemplate.keys(TOKEN_HASH_KEY + "*");
|
||||||
for (Map.Entry<String, AppToken> kvs : tokens.entrySet()) {
|
List<AppToken> existAppTokens = redisTemplate.opsForValue().multiGet(keys);
|
||||||
AppToken appToken = kvs.getValue();
|
for (AppToken existAppToken : existAppTokens) {
|
||||||
users.add(appToken.getAppTokenUser());
|
users.add(existAppToken.getAppTokenUser());
|
||||||
}
|
}
|
||||||
return users;
|
return users;
|
||||||
}
|
}
|
||||||
@ -72,18 +74,15 @@ public class RedisAppTokenService implements IAppTokenService {
|
|||||||
@Override
|
@Override
|
||||||
public void clearTimeoutToken() {
|
public void clearTimeoutToken() {
|
||||||
long currentTime = System.currentTimeMillis();
|
long currentTime = System.currentTimeMillis();
|
||||||
List<String> clearTokenKeys = new ArrayList<>(0);
|
Set<String> clearTokenKeys = new HashSet<>(16);
|
||||||
Map<String, AppToken> tokens = redisTemplate.opsForHash().entries(TOKEN_HASH_KEY);
|
Set<String> keys = redisTemplate.keys(TOKEN_HASH_KEY + "*");
|
||||||
for (Map.Entry<String, AppToken> kvs : tokens.entrySet()) {
|
List<AppToken> existAppTokens = redisTemplate.opsForValue().multiGet(keys);
|
||||||
AppToken appToken = kvs.getValue();
|
for (AppToken existAppToken : existAppTokens) {
|
||||||
// 超过10分钟
|
if (currentTime - existAppToken.getLastTime() > 600000L) {
|
||||||
if (currentTime - appToken.getLastTime() > 600000L) {
|
clearTokenKeys.add(TOKEN_HASH_KEY + existAppToken.getToken());
|
||||||
clearTokenKeys.add(kvs.getKey());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (String tokenKey : clearTokenKeys) {
|
redisTemplate.delete(clearTokenKeys);
|
||||||
redisTemplate.opsForHash().delete(TOKEN_HASH_KEY, tokenKey);
|
|
||||||
}
|
|
||||||
LOG.trace("本次共清理超时Token:{}个", clearTokenKeys.size());
|
LOG.trace("本次共清理超时Token:{}个", clearTokenKeys.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user