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