Sfoglia il codice sorgente

优化redis令牌管理

zhou-hao 4 anni fa
parent
commit
ef100a62b2

+ 32 - 22
hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/redis/RedisUserTokenManager.java

@@ -41,12 +41,12 @@ public class RedisUserTokenManager implements UserTokenManager {
     @SuppressWarnings("all")
     public RedisUserTokenManager(ReactiveRedisConnectionFactory connectionFactory) {
         this(new ReactiveRedisTemplate<>(connectionFactory,
-                RedisSerializationContext.newSerializationContext()
-                        .key((RedisSerializer) RedisSerializer.string())
-                        .value(RedisSerializer.java())
-                        .hashKey(RedisSerializer.string())
-                        .hashValue(RedisSerializer.java())
-                        .build()
+                                         RedisSerializationContext.newSerializationContext()
+                                                                  .key((RedisSerializer) RedisSerializer.string())
+                                                                  .value(RedisSerializer.java())
+                                                                  .hashKey(RedisSerializer.string())
+                                                                  .hashValue(RedisSerializer.java())
+                                                                  .build()
         ));
     }
 
@@ -105,37 +105,45 @@ public class RedisUserTokenManager implements UserTokenManager {
     @Override
     public Mono<Integer> totalUser() {
 
-        return totalToken();
+        return operations
+                .scan(ScanOptions
+                              .scanOptions()
+                              .match("*user-token-user:*")
+                              .build())
+                .count()
+                .map(Long::intValue);
     }
 
     @Override
     public Mono<Integer> totalToken() {
-        return operations.scan(ScanOptions
-                .scanOptions()
-                .match("user-token:*")
-                .build())
+        return operations
+                .scan(ScanOptions
+                              .scanOptions()
+                              .match("*user-token:*")
+                              .build())
                 .count()
                 .map(Long::intValue);
     }
 
     @Override
     public Flux<UserToken> allLoggedUser() {
-        return operations.scan(ScanOptions
-                .scanOptions()
-                .match("user-token:*")
-                .build())
-                .map(String::valueOf)
+        return operations
+                .scan(ScanOptions
+                              .scanOptions()
+                              .match("*user-token:*")
+                              .build())
+                .map(val -> String.valueOf(val).substring(11))
                 .flatMap(this::getByToken);
     }
 
     @Override
     public Mono<Void> signOutByUserId(String userId) {
-        String key = getUserRedisKey(userId);
-        return getByUserId(key)
+        return this
+                .getByUserId(userId)
                 .flatMap(userToken -> operations
                         .delete(getTokenRedisKey(userToken.getToken()))
                         .then(onTokenRemoved(userToken)))
-                .then(operations.delete(key))
+                .then(operations.delete(getUserRedisKey(userId)))
                 .then();
     }
 
@@ -244,11 +252,13 @@ public class RedisUserTokenManager implements UserTokenManager {
     public Mono<Void> checkExpiredToken() {
 
         return operations
-                .scan(ScanOptions.scanOptions().match("user-token-user:*").build())
+                .scan(ScanOptions.scanOptions().match("*user-token-user:*").build())
                 .map(String::valueOf)
-                .flatMap(key -> userTokenMapping.members(key)
+                .flatMap(key -> userTokenMapping
+                        .members(key)
                         .map(String::valueOf)
-                        .flatMap(token -> operations.hasKey(getTokenRedisKey(token))
+                        .flatMap(token -> operations
+                                .hasKey(getTokenRedisKey(token))
                                 .flatMap(exists -> {
                                     if (!exists) {
                                         return userTokenMapping.remove(key, token);