diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaTerminalInfo.java b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaTerminalInfo.java index 813f009d..f41cd1ea 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaTerminalInfo.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaTerminalInfo.java @@ -16,6 +16,8 @@ package cn.dev33.satoken.session; import java.io.Serializable; +import java.util.LinkedHashMap; +import java.util.Map; /** * 登录设备终端信息 Model @@ -51,9 +53,9 @@ public class SaTerminalInfo implements Serializable { private String deviceId; /** - * 此次登录的自定义挂载数据 + * 此次登录的自定义扩展数据 (只允许在登录前设定,登录后不建议更改) */ - private Object tag; + private Map extraData; /** * 创建时间 @@ -72,16 +74,56 @@ public class SaTerminalInfo implements Serializable { * @param index 登录会话索引值 (该账号第几个登录的设备) * @param tokenValue Token 值 * @param deviceType 所属设备类型 - * @param tag 此客户端登录的挂载数据 + * @param extraData 此客户端登录的挂载数据 */ - public SaTerminalInfo(int index, String tokenValue, String deviceType, Object tag) { + public SaTerminalInfo(int index, String tokenValue, String deviceType, Map extraData) { this.index = index; this.tokenValue = tokenValue; this.deviceType = deviceType; - this.tag = tag; + this.extraData = extraData; this.createTime = System.currentTimeMillis(); } + // 扩展方法 + + /** + * 此次登录的自定义扩展数据 (只允许在登录前设定,登录后不建议更改) + * @param key 键 + * @param value 值 + * @return 对象自身 + */ + public SaTerminalInfo setExtra(String key, Object value) { + if(this.extraData == null) { + this.extraData = new LinkedHashMap<>(); + } + this.extraData.put(key, value); + return this; + } + + /** + * 此次登录的自定义扩展数据 + * @param key 键 + * @return 扩展数据的值 + */ + public Object getExtra(String key) { + if(this.extraData == null) { + return null; + } + return this.extraData.get(key); + } + + /** + * 判断是否设置了扩展数据 + * @return / + */ + public boolean isSetExtraData() { + return extraData != null && !extraData.isEmpty(); + } + + + + // -------------------- get/set -------------------- + /** * 获取 登录会话索引值 (该账号第几个登录的设备) * @@ -163,18 +205,18 @@ public class SaTerminalInfo implements Serializable { * * @return / */ - public Object getTag() { - return this.tag; + public Map getExtraData() { + return this.extraData; } /** * 设置 此客户端登录的挂载数据 * - * @param tag / + * @param extraData / * @return 对象自身 */ - public SaTerminalInfo setTag(Object tag) { - this.tag = tag; + public SaTerminalInfo setExtraData(Map extraData) { + this.extraData = extraData; return this; } @@ -206,7 +248,7 @@ public class SaTerminalInfo implements Serializable { ", tokenValue=" + tokenValue + ", deviceType=" + deviceType + ", deviceId=" + deviceId + - ", tag=" + tag + + ", extraData=" + extraData + ", createTime=" + createTime + "]"; } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginConfig.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginConfig.java index de5d22b9..49f5d830 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginConfig.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginConfig.java @@ -113,8 +113,8 @@ public class SaLoginConfig { * @param tokenSignTag / * @return 登录参数 Model */ - public static SaLoginParameter setTokenSignTag(Object tokenSignTag) { - return create().setTerminalTag(tokenSignTag); + public static SaLoginParameter setTokenSignTag(Map tokenSignTag) { + return create().setTerminalExtraData(tokenSignTag); } /** diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginParameter.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginParameter.java index c41c0aba..bde741f3 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginParameter.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/SaLoginParameter.java @@ -59,9 +59,9 @@ public class SaLoginParameter { private String token; /** - * 本次登录挂载到 SaTerminalInfo 的自定义数据 + * 本次登录挂载到 SaTerminalInfo 的自定义扩展数据 */ - private Object terminalTag; + private Map terminalExtraData; // --------- 覆盖性参数 @@ -134,13 +134,11 @@ public class SaLoginParameter { return this; } - - /** - * 写入扩展数据(只在jwt模式下生效) + * 写入扩展数据(只在jwt模式下生效) * @param key 键 - * @param value 值 - * @return 对象自身 + * @param value 值 + * @return 对象自身 */ public SaLoginParameter setExtra(String key, Object value) { if(this.extraData == null) { @@ -151,9 +149,9 @@ public class SaLoginParameter { } /** - * 获取扩展数据(只在jwt模式下生效) + * 获取扩展数据(只在jwt模式下生效) * @param key 键 - * @return 扩展数据的值 + * @return 扩展数据的值 */ public Object getExtra(String key) { if(this.extraData == null) { @@ -163,13 +161,47 @@ public class SaLoginParameter { } /** - * 判断是否设置了扩展数据 - * @return / + * 判断是否设置了扩展数据(只在jwt模式下生效) + * @return / */ public boolean isSetExtraData() { return extraData != null && !extraData.isEmpty(); } + /** + * 写入本次登录挂载到 SaTerminalInfo 的自定义扩展数据 + * @param key 键 + * @param value 值 + * @return 对象自身 + */ + public SaLoginParameter setTerminalExtra(String key, Object value) { + if(this.terminalExtraData == null) { + this.terminalExtraData = new LinkedHashMap<>(); + } + this.terminalExtraData.put(key, value); + return this; + } + + /** + * 获取本次登录挂载到 SaTerminalInfo 的自定义扩展数据 + * @param key 键 + * @return 扩展数据的值 + */ + public Object getTerminalExtra(String key) { + if(this.terminalExtraData == null) { + return null; + } + return this.terminalExtraData.get(key); + } + + /** + * 判断是否设置了本次登录挂载到 SaTerminalInfo 的自定义扩展数据 + * @return / + */ + public boolean isSetTerminalExtraData() { + return terminalExtraData != null && !terminalExtraData.isEmpty(); + } + /** * 计算 Cookie 时长 * @return / @@ -204,8 +236,6 @@ public class SaLoginParameter { } - // ---------------- 过期方法 - // ---------------- get set @@ -405,22 +435,22 @@ public class SaLoginParameter { } /** - * 获取 本次登录挂载到 SaTerminalInfo 的自定义数据 + * 获取 本次登录挂载到 SaTerminalInfo 的自定义扩展数据 * - * @return 本次登录挂载到 SaTerminalInfo 的自定义数据 + * @return / */ - public Object getTerminalTag() { - return this.terminalTag; + public Map getTerminalExtraData() { + return this.terminalExtraData; } /** - * 设置 本次登录挂载到 SaTerminalInfo 的自定义数据 + * 设置 本次登录挂载到 SaTerminalInfo 的自定义扩展数据 * - * @param terminalTag 本次登录挂载到 SaTerminalInfo 的自定义数据 + * @param terminalExtraData / * @return 对象自身 */ - public SaLoginParameter setTerminalTag(Object terminalTag) { - this.terminalTag = terminalTag; + public SaLoginParameter setTerminalExtraData(Map terminalExtraData) { + this.terminalExtraData = terminalExtraData; return this; } @@ -442,7 +472,7 @@ public class SaLoginParameter { + ", extraData=" + extraData + ", token=" + token + ", isWriteHeader=" + isWriteHeader - + ", terminalTag=" + terminalTag + + ", terminalTag=" + terminalExtraData + "]"; } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java index b1d35f11..025a558f 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java @@ -477,7 +477,7 @@ public class StpLogic { .setDeviceType(loginParameter.getDeviceType()) .setDeviceId(loginParameter.getDeviceId()) .setTokenValue(tokenValue) - .setTag(loginParameter.getTerminalTag()) + .setExtraData(loginParameter.getTerminalExtraData()) .setCreateTime(System.currentTimeMillis()); session.addTerminal(terminalInfo); diff --git a/sa-token-demo/pom.xml b/sa-token-demo/pom.xml index 8b90f1a9..fde0caf9 100644 --- a/sa-token-demo/pom.xml +++ b/sa-token-demo/pom.xml @@ -26,7 +26,7 @@ sa-token-demo-oauth2/sa-token-demo-oauth2-client sa-token-demo-quick-login sa-token-demo-remember-me/sa-token-demo-remember-me-server - + sa-token-demo-solon sa-token-demo-solon-redisson sa-token-demo-springboot sa-token-demo-springboot3-redis diff --git a/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/test/TestController.java b/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/test/TestController.java index dc5758c0..a4258dd5 100644 --- a/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/test/TestController.java +++ b/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/test/TestController.java @@ -31,6 +31,10 @@ public class TestController { .setIsShare(false) .setMaxLoginCount(4) .setMaxTryTimes(12) + .setTerminalExtra("deviceSimpleTitle", "XiaoMi 15 Ultra") + .setTerminalExtra("loginAddress", "浙江省杭州市西湖区") + .setTerminalExtra("loginIp", "127.0.0.1") + .setTerminalExtra("loginTime", SaFoxUtil.formatDate(new Date())) ); return SaResult.ok("登录成功"); }