diff --git a/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java b/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java index 74bef31969577188ad9cebdfc605534cfde5635a..719efe2998066f1a715184edd7aca43f2542a7e2 100755 --- a/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java +++ b/pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java @@ -52,6 +52,8 @@ import javax.servlet.http.HttpSession; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; /** * @author lengleng @@ -160,49 +162,15 @@ public class PigTokenEndpoint { public R tokenList(@RequestBody Map params) { // 根据分页参数获取对应数据 String key = String.format("%sauth_to_access:*", CacheConstants.PROJECT_OAUTH_ACCESS); - List pages = findKeysForPage(key, MapUtil.getInt(params, CommonConstants.CURRENT), - MapUtil.getInt(params, CommonConstants.SIZE)); - - redisTemplate.setKeySerializer(new StringRedisSerializer()); - redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); - Page result = new Page(MapUtil.getInt(params, CommonConstants.CURRENT), - MapUtil.getInt(params, CommonConstants.SIZE)); + int current = MapUtil.getInt(params, CommonConstants.CURRENT); + int size = MapUtil.getInt(params, CommonConstants.SIZE); + Set keys = redisTemplate.keys(key); + List pages = keys.stream().skip((current - 1) * size).limit(size).collect(Collectors.toList()); + Page result = new Page(current, size); result.setRecords(redisTemplate.opsForValue().multiGet(pages)); - result.setTotal(redisTemplate.keys(key).size()); + result.setTotal(keys.size()); return R.ok(result); } - private List findKeysForPage(String patternKey, int pageNum, int pageSize) { - ScanOptions options = ScanOptions.scanOptions().count(1000L).match(patternKey).build(); - RedisSerializer redisSerializer = (RedisSerializer) redisTemplate.getKeySerializer(); - Cursor cursor = (Cursor) redisTemplate.executeWithStickyConnection( - redisConnection -> new ConvertingCursor<>(redisConnection.scan(options), redisSerializer::deserialize)); - List result = new ArrayList<>(); - int tmpIndex = 0; - int startIndex = (pageNum - 1) * pageSize; - int end = pageNum * pageSize; - - assert cursor != null; - while (cursor.hasNext()) { - if (tmpIndex >= startIndex && tmpIndex < end) { - result.add(cursor.next().toString()); - tmpIndex++; - continue; - } - if (tmpIndex >= end) { - break; - } - tmpIndex++; - cursor.next(); - } - - try { - cursor.close(); - } - catch (Exception e) { - log.error("关闭cursor 失败"); - } - return result; - } }