mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-09-23 12:33:36 +08:00
完善 SaSession 模块相关单元测试
This commit is contained in:
@@ -7,6 +7,8 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.util.SaFoxUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sa-Token配置文件的构建工厂类
|
* Sa-Token配置文件的构建工厂类
|
||||||
* <p>
|
* <p>
|
||||||
@@ -17,6 +19,9 @@ import java.util.Properties;
|
|||||||
*/
|
*/
|
||||||
public class SaTokenConfigFactory {
|
public class SaTokenConfigFactory {
|
||||||
|
|
||||||
|
private SaTokenConfigFactory() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 配置文件地址
|
* 配置文件地址
|
||||||
*/
|
*/
|
||||||
@@ -101,7 +106,7 @@ public class SaTokenConfigFactory {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
Object valueConvert = getObjectByClass(value, field.getType());
|
Object valueConvert = SaFoxUtil.getValueByType(value, field.getType());
|
||||||
field.setAccessible(true);
|
field.setAccessible(true);
|
||||||
field.set(obj, valueConvert);
|
field.set(obj, valueConvert);
|
||||||
} catch (IllegalArgumentException | IllegalAccessException e) {
|
} catch (IllegalArgumentException | IllegalAccessException e) {
|
||||||
@@ -111,36 +116,4 @@ public class SaTokenConfigFactory {
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 工具方法: 将字符串转化为指定数据类型
|
|
||||||
*
|
|
||||||
* @param str 值
|
|
||||||
* @param cs 要转换的类型
|
|
||||||
* @return 转化好的结果
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
private static <T> T getObjectByClass(String str, Class<T> cs) {
|
|
||||||
Object value;
|
|
||||||
if (str == null) {
|
|
||||||
value = null;
|
|
||||||
} else if (cs.equals(String.class)) {
|
|
||||||
value = str;
|
|
||||||
} else if (cs.equals(int.class) || cs.equals(Integer.class)) {
|
|
||||||
value = Integer.valueOf(str);
|
|
||||||
} else if (cs.equals(long.class) || cs.equals(Long.class)) {
|
|
||||||
value = Long.valueOf(str);
|
|
||||||
} else if (cs.equals(short.class) || cs.equals(Short.class)) {
|
|
||||||
value = Short.valueOf(str);
|
|
||||||
} else if (cs.equals(float.class) || cs.equals(Float.class)) {
|
|
||||||
value = Float.valueOf(str);
|
|
||||||
} else if (cs.equals(double.class) || cs.equals(Double.class)) {
|
|
||||||
value = Double.valueOf(str);
|
|
||||||
} else if (cs.equals(boolean.class) || cs.equals(Boolean.class)) {
|
|
||||||
value = Boolean.valueOf(str);
|
|
||||||
} else {
|
|
||||||
throw new RuntimeException("未能将值:" + str + ",转换类型为:" + cs, null);
|
|
||||||
}
|
|
||||||
return (T) value;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -23,6 +23,9 @@ import cn.dev33.satoken.strategy.SaStrategy;
|
|||||||
*/
|
*/
|
||||||
public class SaSessionCustomUtil {
|
public class SaSessionCustomUtil {
|
||||||
|
|
||||||
|
private SaSessionCustomUtil() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加上指定前缀,防止恶意伪造Session
|
* 添加上指定前缀,防止恶意伪造Session
|
||||||
*/
|
*/
|
||||||
|
@@ -86,6 +86,8 @@ public class SaTokenConfigTest {
|
|||||||
SaCookieConfig scc = new SaCookieConfig();
|
SaCookieConfig scc = new SaCookieConfig();
|
||||||
config.setCookie(scc);
|
config.setCookie(scc);
|
||||||
Assertions.assertEquals(config.getCookie(), scc);
|
Assertions.assertEquals(config.getCookie(), scc);
|
||||||
|
|
||||||
|
config.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 从文件读取
|
// 从文件读取
|
||||||
|
@@ -0,0 +1,52 @@
|
|||||||
|
package cn.dev33.satoken.core.session;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.SaManager;
|
||||||
|
import cn.dev33.satoken.dao.SaTokenDao;
|
||||||
|
import cn.dev33.satoken.session.SaSession;
|
||||||
|
import cn.dev33.satoken.session.SaSessionCustomUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SaSession 测试
|
||||||
|
*
|
||||||
|
* @author kong
|
||||||
|
* @since: 2022-2-9
|
||||||
|
*/
|
||||||
|
public class SaSessionCustomUtilTest {
|
||||||
|
|
||||||
|
// 测试自定义Session
|
||||||
|
@Test
|
||||||
|
public void testCustomSession() {
|
||||||
|
SaTokenDao dao = SaManager.getSaTokenDao();
|
||||||
|
|
||||||
|
// 刚开始不存在
|
||||||
|
Assertions.assertFalse(SaSessionCustomUtil.isExists("art-1"));
|
||||||
|
SaSession session = dao.getSession("satoken:custom:session:" + "art-1");
|
||||||
|
Assertions.assertNull(session);
|
||||||
|
|
||||||
|
// 调用一下
|
||||||
|
SaSessionCustomUtil.getSessionById("art-1");
|
||||||
|
SaSessionCustomUtil.getSessionById("art-1", false);
|
||||||
|
|
||||||
|
// 就存在了
|
||||||
|
Assertions.assertTrue(SaSessionCustomUtil.isExists("art-1"));
|
||||||
|
SaSession session2 = dao.getSession("satoken:custom:session:" + "art-1");
|
||||||
|
Assertions.assertNotNull(session2);
|
||||||
|
|
||||||
|
// 给删除掉
|
||||||
|
SaSessionCustomUtil.deleteSessionById("art-1");
|
||||||
|
|
||||||
|
// 就又不存在了
|
||||||
|
Assertions.assertFalse(SaSessionCustomUtil.isExists("art-1"));
|
||||||
|
SaSession session3 = dao.getSession("satoken:custom:session:" + "art-1");
|
||||||
|
Assertions.assertNull(session3);
|
||||||
|
|
||||||
|
// 调用了也不会存在
|
||||||
|
SaSessionCustomUtil.getSessionById("art-4", false);
|
||||||
|
SaSession session4 = dao.getSession("satoken:custom:session:" + "art-2");
|
||||||
|
Assertions.assertNull(session4);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -1,9 +1,16 @@
|
|||||||
package cn.dev33.satoken.core.session;
|
package cn.dev33.satoken.core.session;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.SaManager;
|
||||||
import cn.dev33.satoken.session.SaSession;
|
import cn.dev33.satoken.session.SaSession;
|
||||||
|
import cn.dev33.satoken.session.TokenSign;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SaSession 测试
|
* SaSession 测试
|
||||||
@@ -13,12 +20,27 @@ import cn.dev33.satoken.session.SaSession;
|
|||||||
*/
|
*/
|
||||||
public class SaSessionTest {
|
public class SaSessionTest {
|
||||||
|
|
||||||
|
// 基础属性
|
||||||
@Test
|
@Test
|
||||||
public void test() {
|
public void testProp() {
|
||||||
SaSession session = new SaSession("session-1001");
|
SaSession session = new SaSession("session-1001");
|
||||||
Assertions.assertEquals(session.getId(), "session-1001");
|
Assertions.assertEquals(session.getId(), "session-1001");
|
||||||
|
|
||||||
|
// 属性读取
|
||||||
|
session = new SaSession();
|
||||||
|
session.setId("session-1009");
|
||||||
|
Assertions.assertEquals(session.getId(), "session-1009");
|
||||||
|
|
||||||
|
session.setCreateTime(1662241013902L);
|
||||||
|
Assertions.assertEquals(session.getCreateTime(), 1662241013902L);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 基础存取值
|
||||||
|
@Test
|
||||||
|
public void testSetGet() {
|
||||||
|
|
||||||
// 基础取值
|
// 基础取值
|
||||||
|
SaSession session = new SaSession("session-1002");
|
||||||
session.set("name", "zhangsan");
|
session.set("name", "zhangsan");
|
||||||
session.set("age", 18);
|
session.set("age", 18);
|
||||||
Assertions.assertEquals(session.get("name"), "zhangsan");
|
Assertions.assertEquals(session.get("name"), "zhangsan");
|
||||||
@@ -26,6 +48,12 @@ public class SaSessionTest {
|
|||||||
Assertions.assertEquals((int)session.get("age2", 20), 20);
|
Assertions.assertEquals((int)session.get("age2", 20), 20);
|
||||||
Assertions.assertEquals(session.getModel("age", Double.class).getClass(), Double.class);
|
Assertions.assertEquals(session.getModel("age", Double.class).getClass(), Double.class);
|
||||||
|
|
||||||
|
// 原本无值时才会写入
|
||||||
|
session.setByNull("name", "lisi");
|
||||||
|
Assertions.assertEquals(session.get("name"), "zhangsan");
|
||||||
|
session.setByNull("name2", "lisi");
|
||||||
|
Assertions.assertEquals(session.get("name2"), "lisi");
|
||||||
|
|
||||||
// 复杂取值
|
// 复杂取值
|
||||||
class User {
|
class User {
|
||||||
String name;
|
String name;
|
||||||
@@ -42,17 +70,81 @@ public class SaSessionTest {
|
|||||||
Assertions.assertNotNull(user2);
|
Assertions.assertNotNull(user2);
|
||||||
Assertions.assertEquals(user2.name, "zhangsan");
|
Assertions.assertEquals(user2.name, "zhangsan");
|
||||||
Assertions.assertEquals(user2.age, 18);
|
Assertions.assertEquals(user2.age, 18);
|
||||||
|
}
|
||||||
|
|
||||||
// Token签名
|
// 测试有效期
|
||||||
|
@Test
|
||||||
|
public void testSessionTimeout() {
|
||||||
|
// 修改剩余有效期
|
||||||
|
SaSession session = new SaSession("session-1005");
|
||||||
|
SaManager.getSaTokenDao().setSession(session, 20000);
|
||||||
|
session.updateMaxTimeout(100);
|
||||||
|
Assertions.assertTrue(session.getTimeout() <= 100);
|
||||||
|
System.out.println(session.getTimeout());
|
||||||
|
// 仍然是 <=100
|
||||||
|
session.updateMaxTimeout(1000);
|
||||||
|
Assertions.assertTrue(session.getTimeout() <= 100);
|
||||||
|
System.out.println(session.getTimeout());
|
||||||
|
// Min 修改
|
||||||
|
session.updateMinTimeout(-1);
|
||||||
|
System.out.println(session.getTimeout());
|
||||||
|
Assertions.assertTrue(session.getTimeout() == -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 测试token 签名
|
||||||
|
@Test
|
||||||
|
public void testTokenSign() {
|
||||||
|
SaSession session = new SaSession("session-1002");
|
||||||
|
|
||||||
|
// 添加 Token 签名
|
||||||
session.addTokenSign("xxxx-xxxx-xxxx-xxxx-1", "PC");
|
session.addTokenSign("xxxx-xxxx-xxxx-xxxx-1", "PC");
|
||||||
session.addTokenSign("xxxx-xxxx-xxxx-xxxx-2", "APP");
|
session.addTokenSign("xxxx-xxxx-xxxx-xxxx-2", "APP");
|
||||||
|
|
||||||
|
// 查询
|
||||||
Assertions.assertEquals(session.getTokenSignList().size(), 2);
|
Assertions.assertEquals(session.getTokenSignList().size(), 2);
|
||||||
Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-1").getDevice(), "PC");
|
Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-1").getDevice(), "PC");
|
||||||
Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-2").getDevice(), "APP");
|
Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-2").getDevice(), "APP");
|
||||||
|
|
||||||
|
// 删除一个
|
||||||
session.removeTokenSign("xxxx-xxxx-xxxx-xxxx-1");
|
session.removeTokenSign("xxxx-xxxx-xxxx-xxxx-1");
|
||||||
Assertions.assertEquals(session.getTokenSignList().size(), 1);
|
Assertions.assertEquals(session.getTokenSignList().size(), 1);
|
||||||
|
|
||||||
|
// 删除一个不存在的,则不影响 TokenSign 列表
|
||||||
|
session.removeTokenSign("xxxx-xxxx-xxxx-xxxx-999");
|
||||||
|
Assertions.assertEquals(session.getTokenSignList().size(), 1);
|
||||||
|
|
||||||
|
// 重置整个签名列表
|
||||||
|
List<TokenSign> list = Arrays.asList(
|
||||||
|
new TokenSign("xxxx-xxxx-xxxx-xxxx-1", "WEB"),
|
||||||
|
new TokenSign("xxxx-xxxx-xxxx-xxxx-2", "phone"),
|
||||||
|
new TokenSign("xxxx-xxxx-xxxx-xxxx-3", "ipad")
|
||||||
|
);
|
||||||
|
session.setTokenSignList(list);
|
||||||
|
Assertions.assertEquals(session.getTokenSignList().size(), 3);
|
||||||
|
Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-1").getDevice(), "WEB");
|
||||||
|
Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-2").getDevice(), "phone");
|
||||||
|
Assertions.assertEquals(session.getTokenSign("xxxx-xxxx-xxxx-xxxx-3").getDevice(), "ipad");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 测试重置 DataMap
|
||||||
|
@Test
|
||||||
|
public void testDataMap() {
|
||||||
|
SaSession session = new SaSession("session-1003");
|
||||||
|
session.set("key1", "value1");
|
||||||
|
session.set("key2", "value2");
|
||||||
|
session.set("key3", "value3");
|
||||||
|
|
||||||
|
// 所有数据
|
||||||
|
Assertions.assertEquals(session.keys().size(), 3);
|
||||||
|
Assertions.assertEquals(session.getDataMap().size(), 3);
|
||||||
|
|
||||||
|
// 重置所有数据
|
||||||
|
Map<String, Object> dataMap = new ConcurrentHashMap<>();
|
||||||
|
dataMap.put("aaa", "111");
|
||||||
|
dataMap.put("bbb", "222");
|
||||||
|
session.refreshDataMap(dataMap);
|
||||||
|
Assertions.assertEquals(session.keys().size(), 2);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -17,7 +17,6 @@ import cn.dev33.satoken.exception.NotPermissionException;
|
|||||||
import cn.dev33.satoken.exception.NotRoleException;
|
import cn.dev33.satoken.exception.NotRoleException;
|
||||||
import cn.dev33.satoken.exception.NotSafeException;
|
import cn.dev33.satoken.exception.NotSafeException;
|
||||||
import cn.dev33.satoken.session.SaSession;
|
import cn.dev33.satoken.session.SaSession;
|
||||||
import cn.dev33.satoken.session.SaSessionCustomUtil;
|
|
||||||
import cn.dev33.satoken.stp.SaLoginConfig;
|
import cn.dev33.satoken.stp.SaLoginConfig;
|
||||||
import cn.dev33.satoken.stp.SaLoginModel;
|
import cn.dev33.satoken.stp.SaLoginModel;
|
||||||
import cn.dev33.satoken.stp.StpLogic;
|
import cn.dev33.satoken.stp.StpLogic;
|
||||||
@@ -315,31 +314,6 @@ public class BasicsTest {
|
|||||||
Assertions.assertEquals(tokenSession.getId(), tokenSession2.getId());
|
Assertions.assertEquals(tokenSession.getId(), tokenSession2.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 测试自定义Session
|
|
||||||
@Test
|
|
||||||
public void testCustomSession() {
|
|
||||||
// 刚开始不存在
|
|
||||||
Assertions.assertFalse(SaSessionCustomUtil.isExists("art-1"));
|
|
||||||
SaSession session = dao.getSession("satoken:custom:session:" + "art-1");
|
|
||||||
Assertions.assertNull(session);
|
|
||||||
|
|
||||||
// 调用一下
|
|
||||||
SaSessionCustomUtil.getSessionById("art-1");
|
|
||||||
|
|
||||||
// 就存在了
|
|
||||||
Assertions.assertTrue(SaSessionCustomUtil.isExists("art-1"));
|
|
||||||
SaSession session2 = dao.getSession("satoken:custom:session:" + "art-1");
|
|
||||||
Assertions.assertNotNull(session2);
|
|
||||||
|
|
||||||
// 给删除掉
|
|
||||||
SaSessionCustomUtil.deleteSessionById("art-1");
|
|
||||||
|
|
||||||
// 就又不存在了
|
|
||||||
Assertions.assertFalse(SaSessionCustomUtil.isExists("art-1"));
|
|
||||||
SaSession session3 = dao.getSession("satoken:custom:session:" + "art-1");
|
|
||||||
Assertions.assertNull(session3);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 测试:根据账号id踢人
|
// 测试:根据账号id踢人
|
||||||
@Test
|
@Test
|
||||||
public void kickoutByLoginId() {
|
public void kickoutByLoginId() {
|
||||||
|
Reference in New Issue
Block a user