会话查询API增加反序获取会话方式

This commit is contained in:
click33
2022-08-10 06:50:43 +08:00
parent 664312972a
commit 08ba8a0b52
20 changed files with 246 additions and 57 deletions

View File

@@ -170,9 +170,11 @@ public interface SaTokenDao {
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
* @param sortType 排序类型true=正序false=反序)
*
* @return 查询到的数据集合
*/
public List<String> searchData(String prefix, String keyword, int start, int size);
public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType);
}

View File

@@ -240,8 +240,8 @@ public class SaTokenDaoDefaultImpl implements SaTokenDao {
// --------------------- 会话管理
@Override
public List<String> searchData(String prefix, String keyword, int start, int size) {
return SaFoxUtil.searchList(expireMap.keySet(), prefix, keyword, start, size);
public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) {
return SaFoxUtil.searchList(expireMap.keySet(), prefix, keyword, start, size, sortType);
}

View File

@@ -1499,10 +1499,12 @@ public class StpLogic {
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
* @param sortType 排序类型true=正序false=反序)
*
* @return token集合
*/
public List<String> searchTokenValue(String keyword, int start, int size) {
return getSaTokenDao().searchData(splicingKeyTokenValue(""), keyword, start, size);
public List<String> searchTokenValue(String keyword, int start, int size, boolean sortType) {
return getSaTokenDao().searchData(splicingKeyTokenValue(""), keyword, start, size, sortType);
}
/**
@@ -1510,10 +1512,12 @@ public class StpLogic {
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
* @param sortType 排序类型true=正序false=反序)
*
* @return sessionId集合
*/
public List<String> searchSessionId(String keyword, int start, int size) {
return getSaTokenDao().searchData(splicingKeySession(""), keyword, start, size);
public List<String> searchSessionId(String keyword, int start, int size, boolean sortType) {
return getSaTokenDao().searchData(splicingKeySession(""), keyword, start, size, sortType);
}
/**
@@ -1521,10 +1525,12 @@ public class StpLogic {
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
* @param sortType 排序类型true=正序false=反序)
*
* @return sessionId集合
*/
public List<String> searchTokenSessionId(String keyword, int start, int size) {
return getSaTokenDao().searchData(splicingKeyTokenSession(""), keyword, start, size);
public List<String> searchTokenSessionId(String keyword, int start, int size, boolean sortType) {
return getSaTokenDao().searchData(splicingKeyTokenSession(""), keyword, start, size, sortType);
}

View File

@@ -692,10 +692,12 @@ public class StpUtil {
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
* @param sortType 排序类型true=正序false=反序)
*
* @return token集合
*/
public static List<String> searchTokenValue(String keyword, int start, int size) {
return stpLogic.searchTokenValue(keyword, start, size);
public static List<String> searchTokenValue(String keyword, int start, int size, boolean sortType) {
return stpLogic.searchTokenValue(keyword, start, size, sortType);
}
/**
@@ -703,10 +705,12 @@ public class StpUtil {
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
* @param sortType 排序类型true=正序false=反序)
*
* @return sessionId集合
*/
public static List<String> searchSessionId(String keyword, int start, int size) {
return stpLogic.searchSessionId(keyword, start, size);
public static List<String> searchSessionId(String keyword, int start, int size, boolean sortType) {
return stpLogic.searchSessionId(keyword, start, size, sortType);
}
/**
@@ -714,10 +718,12 @@ public class StpUtil {
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
* @param sortType 排序类型true=正序false=反序)
*
* @return sessionId集合
*/
public static List<String> searchTokenSessionId(String keyword, int start, int size) {
return stpLogic.searchTokenSessionId(keyword, start, size);
public static List<String> searchTokenSessionId(String keyword, int start, int size, boolean sortType) {
return stpLogic.searchTokenSessionId(keyword, start, size, sortType);
}
@@ -921,4 +927,49 @@ public class StpUtil {
stpLogic.kickout(loginId, device);
}
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.searchTokenValue(keyword, start, size, sortType) ,使用方式保持不变 </h1>
*
* 根据条件查询Token
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
*
* @return token集合
*/
@Deprecated
public static List<String> searchTokenValue(String keyword, int start, int size) {
return stpLogic.searchTokenValue(keyword, start, size, true);
}
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.searchSessionId(keyword, start, size, sortType) ,使用方式保持不变 </h1>
*
* 根据条件查询SessionId
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
*
* @return sessionId集合
*/
@Deprecated
public static List<String> searchSessionId(String keyword, int start, int size) {
return stpLogic.searchSessionId(keyword, start, size, true);
}
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.searchTokenSessionId(keyword, start, size, sortType) ,使用方式保持不变 </h1>
*
* 根据条件查询Token专属Session的Id
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
*
* @return sessionId集合
*/
@Deprecated
public static List<String> searchTokenSessionId(String keyword, int start, int size) {
return stpLogic.searchTokenSessionId(keyword, start, size, true);
}
}

View File

@@ -6,6 +6,7 @@ import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@@ -111,10 +112,11 @@ public class SaFoxUtil {
* @param keyword 关键字
* @param start 起始位置 (-1代表查询所有)
* @param size 获取条数
* @param sortType 排序类型true=正序false=反序)
*
* @return 符合条件的新数据集合
*/
public static List<String> searchList(Collection<String> dataList, String prefix, String keyword, int start,
int size) {
public static List<String> searchList(Collection<String> dataList, String prefix, String keyword, int start, int size, boolean sortType) {
if (prefix == null) {
prefix = "";
}
@@ -131,7 +133,7 @@ public class SaFoxUtil {
}
}
// 取指定段数据
return searchList(list, start, size);
return searchList(list, start, size, sortType);
}
/**
@@ -140,9 +142,15 @@ public class SaFoxUtil {
* @param list 数据集合
* @param start 起始位置 (-1代表查询所有)
* @param size 获取条数
* @param sortType 排序类型true=正序false=反序)
*
* @return 符合条件的新数据集合
*/
public static List<String> searchList(List<String> list, int start, int size) {
public static List<String> searchList(List<String> list, int start, int size, boolean sortType) {
// 如果是反序的话
if(sortType == false) {
Collections.reverse(list);
}
// 取指定段数据
if (start < 0) {
return list;

View File

@@ -217,7 +217,7 @@ public class TestController {
public AjaxJson search() {
System.out.println("--------------");
Ttime t = new Ttime().start();
List<String> tokenValue = StpUtil.searchTokenValue("8feb8265f773", 0, 10);
List<String> tokenValue = StpUtil.searchTokenValue("8feb8265f773", 0, 10, true);
for (String v : tokenValue) {
// SaSession session = StpUtil.getSessionBySessionId(sid);
System.out.println(v);

View File

@@ -10,7 +10,7 @@ import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpLogic;
/**
* Sa-Token 权限认证工具类 (user版)
* Sa-Token 权限认证工具类 (User版)
* @author kong
*/
public class StpUserUtil {
@@ -316,7 +316,7 @@ public class StpUserUtil {
}
/**
* 获取Token扩展信息只在jwt模式下效)
* 获取当前 Token扩展信息(此函数只在jwt模式下效)
* @param key 键值
* @return 对应的扩展数据
*/
@@ -324,6 +324,16 @@ public class StpUserUtil {
return stpLogic.getExtra(key);
}
/**
* 获取指定 Token 的扩展信息此函数只在jwt模式下生效
* @param tokenValue 指定的 Token 值
* @param key 键值
* @return 对应的扩展数据
*/
public static Object getExtra(String tokenValue, String key) {
return stpLogic.getExtra(tokenValue, key);
}
// =================== User-Session 相关 ===================
@@ -685,10 +695,12 @@ public class StpUserUtil {
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
* @param sortType 排序类型true=正序false=反序)
*
* @return token集合
*/
public static List<String> searchTokenValue(String keyword, int start, int size) {
return stpLogic.searchTokenValue(keyword, start, size);
public static List<String> searchTokenValue(String keyword, int start, int size, boolean sortType) {
return stpLogic.searchTokenValue(keyword, start, size, sortType);
}
/**
@@ -696,10 +708,12 @@ public class StpUserUtil {
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
* @param sortType 排序类型true=正序false=反序)
*
* @return sessionId集合
*/
public static List<String> searchSessionId(String keyword, int start, int size) {
return stpLogic.searchSessionId(keyword, start, size);
public static List<String> searchSessionId(String keyword, int start, int size, boolean sortType) {
return stpLogic.searchSessionId(keyword, start, size, sortType);
}
/**
@@ -707,10 +721,12 @@ public class StpUserUtil {
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
* @param sortType 排序类型true=正序false=反序)
*
* @return sessionId集合
*/
public static List<String> searchTokenSessionId(String keyword, int start, int size) {
return stpLogic.searchTokenSessionId(keyword, start, size);
public static List<String> searchTokenSessionId(String keyword, int start, int size, boolean sortType) {
return stpLogic.searchTokenSessionId(keyword, start, size, sortType);
}
@@ -914,4 +930,49 @@ public class StpUserUtil {
stpLogic.kickout(loginId, device);
}
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.searchTokenValue(keyword, start, size, sortType) ,使用方式保持不变 </h1>
*
* 根据条件查询Token
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
*
* @return token集合
*/
@Deprecated
public static List<String> searchTokenValue(String keyword, int start, int size) {
return stpLogic.searchTokenValue(keyword, start, size, true);
}
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.searchSessionId(keyword, start, size, sortType) ,使用方式保持不变 </h1>
*
* 根据条件查询SessionId
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
*
* @return sessionId集合
*/
@Deprecated
public static List<String> searchSessionId(String keyword, int start, int size) {
return stpLogic.searchSessionId(keyword, start, size, true);
}
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.searchTokenSessionId(keyword, start, size, sortType) ,使用方式保持不变 </h1>
*
* 根据条件查询Token专属Session的Id
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
*
* @return sessionId集合
*/
@Deprecated
public static List<String> searchTokenSessionId(String keyword, int start, int size) {
return stpLogic.searchTokenSessionId(keyword, start, size, true);
}
}

View File

@@ -218,7 +218,7 @@ public class TestController {
public AjaxJson search() {
System.out.println("--------------");
Ttime t = new Ttime().start();
List<String> tokenValue = StpUtil.searchTokenValue("8feb8265f773", 0, 10);
List<String> tokenValue = StpUtil.searchTokenValue("8feb8265f773", 0, 10, true);
for (String v : tokenValue) {
// SaSession session = StpUtil.getSessionBySessionId(sid);
System.out.println(v);

View File

@@ -10,7 +10,7 @@ import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpLogic;
/**
* Sa-Token 权限认证工具类 (user版)
* Sa-Token 权限认证工具类 (User版)
* @author kong
*/
public class StpUserUtil {
@@ -316,7 +316,7 @@ public class StpUserUtil {
}
/**
* 获取Token扩展信息只在jwt模式下效)
* 获取当前 Token扩展信息(此函数只在jwt模式下效)
* @param key 键值
* @return 对应的扩展数据
*/
@@ -324,6 +324,16 @@ public class StpUserUtil {
return stpLogic.getExtra(key);
}
/**
* 获取指定 Token 的扩展信息此函数只在jwt模式下生效
* @param tokenValue 指定的 Token 值
* @param key 键值
* @return 对应的扩展数据
*/
public static Object getExtra(String tokenValue, String key) {
return stpLogic.getExtra(tokenValue, key);
}
// =================== User-Session 相关 ===================
@@ -685,10 +695,12 @@ public class StpUserUtil {
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
* @param sortType 排序类型true=正序false=反序)
*
* @return token集合
*/
public static List<String> searchTokenValue(String keyword, int start, int size) {
return stpLogic.searchTokenValue(keyword, start, size);
public static List<String> searchTokenValue(String keyword, int start, int size, boolean sortType) {
return stpLogic.searchTokenValue(keyword, start, size, sortType);
}
/**
@@ -696,10 +708,12 @@ public class StpUserUtil {
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
* @param sortType 排序类型true=正序false=反序)
*
* @return sessionId集合
*/
public static List<String> searchSessionId(String keyword, int start, int size) {
return stpLogic.searchSessionId(keyword, start, size);
public static List<String> searchSessionId(String keyword, int start, int size, boolean sortType) {
return stpLogic.searchSessionId(keyword, start, size, sortType);
}
/**
@@ -707,10 +721,12 @@ public class StpUserUtil {
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
* @param sortType 排序类型true=正序false=反序)
*
* @return sessionId集合
*/
public static List<String> searchTokenSessionId(String keyword, int start, int size) {
return stpLogic.searchTokenSessionId(keyword, start, size);
public static List<String> searchTokenSessionId(String keyword, int start, int size, boolean sortType) {
return stpLogic.searchTokenSessionId(keyword, start, size, sortType);
}
@@ -914,4 +930,49 @@ public class StpUserUtil {
stpLogic.kickout(loginId, device);
}
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.searchTokenValue(keyword, start, size, sortType) ,使用方式保持不变 </h1>
*
* 根据条件查询Token
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
*
* @return token集合
*/
@Deprecated
public static List<String> searchTokenValue(String keyword, int start, int size) {
return stpLogic.searchTokenValue(keyword, start, size, true);
}
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.searchSessionId(keyword, start, size, sortType) ,使用方式保持不变 </h1>
*
* 根据条件查询SessionId
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
*
* @return sessionId集合
*/
@Deprecated
public static List<String> searchSessionId(String keyword, int start, int size) {
return stpLogic.searchSessionId(keyword, start, size, true);
}
/**
* <h1> 本函数设计已过时,未来版本可能移除此函数,请及时更换为 StpUtil.searchTokenSessionId(keyword, start, size, sortType) ,使用方式保持不变 </h1>
*
* 根据条件查询Token专属Session的Id
* @param keyword 关键字
* @param start 开始处索引 (-1代表查询所有)
* @param size 获取数量
*
* @return sessionId集合
*/
@Deprecated
public static List<String> searchTokenSessionId(String keyword, int start, int size) {
return stpLogic.searchTokenSessionId(keyword, start, size, true);
}
}

View File

@@ -218,7 +218,7 @@ public class TestController {
public AjaxJson search() {
System.out.println("--------------");
Ttime t = new Ttime().start();
List<String> tokenValue = StpUtil.searchTokenValue("8feb8265f773", 0, 10);
List<String> tokenValue = StpUtil.searchTokenValue("8feb8265f773", 0, 10, true);
for (String v : tokenValue) {
// SaSession session = StpUtil.getSessionBySessionId(sid);
System.out.println(v);

View File

@@ -271,10 +271,10 @@ public class SaTokenDaoRedisJackson implements SaTokenDao {
* 搜索数据
*/
@Override
public List<String> searchData(String prefix, String keyword, int start, int size) {
public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) {
Set<String> keys = stringRedisTemplate.keys(prefix + "*" + keyword + "*");
List<String> list = new ArrayList<String>(keys);
return SaFoxUtil.searchList(list, start, size);
return SaFoxUtil.searchList(list, start, size, sortType);
}
}

View File

@@ -226,10 +226,10 @@ public class SaTokenDaoRedisString implements SaTokenDao {
* 搜索数据
*/
@Override
public List<String> searchData(String prefix, String keyword, int start, int size) {
public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) {
Set<String> keys = stringRedisTemplate.keys(prefix + "*" + keyword + "*");
List<String> list = new ArrayList<String>(keys);
return SaFoxUtil.searchList(list, start, size);
return SaFoxUtil.searchList(list, start, size, sortType);
}

View File

@@ -217,10 +217,10 @@ public class SaTokenDaoRedis implements SaTokenDao {
* 搜索数据
*/
@Override
public List<String> searchData(String prefix, String keyword, int start, int size) {
public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) {
Set<String> keys = stringRedisTemplate.keys(prefix + "*" + keyword + "*");
List<String> list = new ArrayList<String>(keys);
return SaFoxUtil.searchList(list, start, size);
return SaFoxUtil.searchList(list, start, size, sortType);
}

View File

@@ -177,9 +177,9 @@ public class SaTokenDaoOfRedis implements SaTokenDao {
* 搜索数据
*/
@Override
public List<String> searchData(String prefix, String keyword, int start, int size) {
public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) {
Set<String> keys = redisBucket.keys(prefix + "*" + keyword + "*");
List<String> list = new ArrayList<String>(keys);
return SaFoxUtil.searchList(list, start, size);
return SaFoxUtil.searchList(list, start, size, sortType);
}
}

View File

@@ -204,7 +204,7 @@ public class StpLogicJwtForMixin extends StpLogic {
* [禁用] 根据条件查询Token
*/
@Override
public List<String> searchTokenValue(String keyword, int start, int size) {
public List<String> searchTokenValue(String keyword, int start, int size, boolean sortType) {
throw new ApiDisabledException();
}

View File

@@ -252,12 +252,12 @@ public class SaTokenCacheDao implements SaTokenDao {
}
@Override
public List<String> searchData(String prefix, String keyword, int start, int size) {
public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) {
Jedis jedis = saRedisCache.getJedis();
try {
Set<String> keys = jedis.keys(prefix + "*" + keyword + "*");
List<String> list = new ArrayList<String>(keys);
return SaFoxUtil.searchList(list, start, size);
return SaFoxUtil.searchList(list, start, size, sortType);
} finally {
saRedisCache.returnResource(jedis);
}

View File

@@ -257,10 +257,10 @@ public class SaTokenDaoRedis implements SaTokenDao {
* @return
*/
@Override
public List<String> searchData(String prefix, String keyword, int start, int size) {
public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) {
Set<String> keys = redis.keys(prefix + "*" + keyword + "*");
List<String> list = new ArrayList<String>(keys);
return SaFoxUtil.searchList(list, start, size);
return SaFoxUtil.searchList(list, start, size, sortType);
}
public Jedis getJedis() {

View File

@@ -47,21 +47,21 @@ public class SaFoxUtilTest {
List<String> dataList = Arrays.asList("token1", "token2", "token3", "token4", "token5", "aaa1");
// 分页
List<String> list1 = SaFoxUtil.searchList(dataList, 1, 2);
List<String> list1 = SaFoxUtil.searchList(dataList, 1, 2, true);
Assertions.assertEquals(list1.size(), 2);
Assertions.assertEquals(list1.get(0), "token2");
Assertions.assertEquals(list1.get(1), "token3");
// 前缀筛选
List<String> list2 = SaFoxUtil.searchList(dataList, "token", "", 0, 10);
List<String> list2 = SaFoxUtil.searchList(dataList, "token", "", 0, 10, true);
Assertions.assertEquals(list2.size(), 5);
// 关键字筛选
List<String> list3 = SaFoxUtil.searchList(dataList, "", "1", 0, 10);
List<String> list3 = SaFoxUtil.searchList(dataList, "", "1", 0, 10, true);
Assertions.assertEquals(list3.size(), 2);
// 综合筛选
List<String> list4 = SaFoxUtil.searchList(dataList, "token", "1", 0, 10);
List<String> list4 = SaFoxUtil.searchList(dataList, "token", "1", 0, 10, true);
Assertions.assertEquals(list4.size(), 1);
}

View File

@@ -251,7 +251,7 @@ public class JwtForMixinTest {
StpUtil.login(10005);
// 查询
List<String> list = StpUtil.searchTokenValue("", 0, 10);
List<String> list = StpUtil.searchTokenValue("", 0, 10, true);
Assertions.assertTrue(list.size() >= 5);
});
}

View File

@@ -316,7 +316,7 @@ public class BasicsTest {
StpUtil.login(10005);
// 查询
List<String> list = StpUtil.searchTokenValue("", 0, 10);
List<String> list = StpUtil.searchTokenValue("", 0, 10, true);
Assertions.assertTrue(list.size() >= 5);
}