feat: SaTerminalInfo 新增 extraData 自定义扩展数据设置

This commit is contained in:
click33
2025-03-04 11:35:45 +08:00
parent b45ccba778
commit 4e78cc8fee
6 changed files with 113 additions and 37 deletions

View File

@@ -16,6 +16,8 @@
package cn.dev33.satoken.session; package cn.dev33.satoken.session;
import java.io.Serializable; import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Map;
/** /**
* 登录设备终端信息 Model * 登录设备终端信息 Model
@@ -51,9 +53,9 @@ public class SaTerminalInfo implements Serializable {
private String deviceId; private String deviceId;
/** /**
* 此次登录的自定义挂载数据 * 此次登录的自定义扩展数据 (只允许在登录前设定,登录后不建议更改)
*/ */
private Object tag; private Map<String, Object> extraData;
/** /**
* 创建时间 * 创建时间
@@ -72,16 +74,56 @@ public class SaTerminalInfo implements Serializable {
* @param index 登录会话索引值 (该账号第几个登录的设备) * @param index 登录会话索引值 (该账号第几个登录的设备)
* @param tokenValue Token 值 * @param tokenValue Token 值
* @param deviceType 所属设备类型 * @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<String, Object> extraData) {
this.index = index; this.index = index;
this.tokenValue = tokenValue; this.tokenValue = tokenValue;
this.deviceType = deviceType; this.deviceType = deviceType;
this.tag = tag; this.extraData = extraData;
this.createTime = System.currentTimeMillis(); 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 / * @return /
*/ */
public Object getTag() { public Map<String, Object> getExtraData() {
return this.tag; return this.extraData;
} }
/** /**
* 设置 此客户端登录的挂载数据 * 设置 此客户端登录的挂载数据
* *
* @param tag / * @param extraData /
* @return 对象自身 * @return 对象自身
*/ */
public SaTerminalInfo setTag(Object tag) { public SaTerminalInfo setExtraData(Map<String, Object> extraData) {
this.tag = tag; this.extraData = extraData;
return this; return this;
} }
@@ -206,7 +248,7 @@ public class SaTerminalInfo implements Serializable {
", tokenValue=" + tokenValue + ", tokenValue=" + tokenValue +
", deviceType=" + deviceType + ", deviceType=" + deviceType +
", deviceId=" + deviceId + ", deviceId=" + deviceId +
", tag=" + tag + ", extraData=" + extraData +
", createTime=" + createTime + ", createTime=" + createTime +
"]"; "]";
} }

View File

@@ -113,8 +113,8 @@ public class SaLoginConfig {
* @param tokenSignTag / * @param tokenSignTag /
* @return 登录参数 Model * @return 登录参数 Model
*/ */
public static SaLoginParameter setTokenSignTag(Object tokenSignTag) { public static SaLoginParameter setTokenSignTag(Map<String, Object> tokenSignTag) {
return create().setTerminalTag(tokenSignTag); return create().setTerminalExtraData(tokenSignTag);
} }
/** /**

View File

@@ -59,9 +59,9 @@ public class SaLoginParameter {
private String token; private String token;
/** /**
* 本次登录挂载到 SaTerminalInfo 的自定义数据 * 本次登录挂载到 SaTerminalInfo 的自定义扩展数据
*/ */
private Object terminalTag; private Map<String, Object> terminalExtraData;
// --------- 覆盖性参数 // --------- 覆盖性参数
@@ -134,13 +134,11 @@ public class SaLoginParameter {
return this; return this;
} }
/** /**
* 写入扩展数据只在jwt模式下生效 * 写入扩展数据只在jwt模式下生效
* @param key 键 * @param key 键
* @param value 值 * @param value 值
* @return 对象自身 * @return 对象自身
*/ */
public SaLoginParameter setExtra(String key, Object value) { public SaLoginParameter setExtra(String key, Object value) {
if(this.extraData == null) { if(this.extraData == null) {
@@ -151,9 +149,9 @@ public class SaLoginParameter {
} }
/** /**
* 获取扩展数据只在jwt模式下生效 * 获取扩展数据只在jwt模式下生效
* @param key 键 * @param key 键
* @return 扩展数据的值 * @return 扩展数据的值
*/ */
public Object getExtra(String key) { public Object getExtra(String key) {
if(this.extraData == null) { if(this.extraData == null) {
@@ -163,13 +161,47 @@ public class SaLoginParameter {
} }
/** /**
* 判断是否设置了扩展数据 * 判断是否设置了扩展数据只在jwt模式下生效
* @return / * @return /
*/ */
public boolean isSetExtraData() { public boolean isSetExtraData() {
return extraData != null && !extraData.isEmpty(); 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 时长 * 计算 Cookie 时长
* @return / * @return /
@@ -204,8 +236,6 @@ public class SaLoginParameter {
} }
// ---------------- 过期方法
// ---------------- get set // ---------------- get set
@@ -405,22 +435,22 @@ public class SaLoginParameter {
} }
/** /**
* 获取 本次登录挂载到 SaTerminalInfo 的自定义数据 * 获取 本次登录挂载到 SaTerminalInfo 的自定义扩展数据
* *
* @return 本次登录挂载到 SaTerminalInfo 的自定义数据 * @return /
*/ */
public Object getTerminalTag() { public Map<String, Object> getTerminalExtraData() {
return this.terminalTag; return this.terminalExtraData;
} }
/** /**
* 设置 本次登录挂载到 SaTerminalInfo 的自定义数据 * 设置 本次登录挂载到 SaTerminalInfo 的自定义扩展数据
* *
* @param terminalTag 本次登录挂载到 SaTerminalInfo 的自定义数据 * @param terminalExtraData /
* @return 对象自身 * @return 对象自身
*/ */
public SaLoginParameter setTerminalTag(Object terminalTag) { public SaLoginParameter setTerminalExtraData(Map<String, Object> terminalExtraData) {
this.terminalTag = terminalTag; this.terminalExtraData = terminalExtraData;
return this; return this;
} }
@@ -442,7 +472,7 @@ public class SaLoginParameter {
+ ", extraData=" + extraData + ", extraData=" + extraData
+ ", token=" + token + ", token=" + token
+ ", isWriteHeader=" + isWriteHeader + ", isWriteHeader=" + isWriteHeader
+ ", terminalTag=" + terminalTag + ", terminalTag=" + terminalExtraData
+ "]"; + "]";
} }

View File

@@ -477,7 +477,7 @@ public class StpLogic {
.setDeviceType(loginParameter.getDeviceType()) .setDeviceType(loginParameter.getDeviceType())
.setDeviceId(loginParameter.getDeviceId()) .setDeviceId(loginParameter.getDeviceId())
.setTokenValue(tokenValue) .setTokenValue(tokenValue)
.setTag(loginParameter.getTerminalTag()) .setExtraData(loginParameter.getTerminalExtraData())
.setCreateTime(System.currentTimeMillis()); .setCreateTime(System.currentTimeMillis());
session.addTerminal(terminalInfo); session.addTerminal(terminalInfo);

View File

@@ -26,7 +26,7 @@
<module>sa-token-demo-oauth2/sa-token-demo-oauth2-client</module> <module>sa-token-demo-oauth2/sa-token-demo-oauth2-client</module>
<module>sa-token-demo-quick-login</module> <module>sa-token-demo-quick-login</module>
<module>sa-token-demo-remember-me/sa-token-demo-remember-me-server</module> <module>sa-token-demo-remember-me/sa-token-demo-remember-me-server</module>
<!-- <module>sa-token-demo-solon</module>--> <module>sa-token-demo-solon</module>
<module>sa-token-demo-solon-redisson</module> <module>sa-token-demo-solon-redisson</module>
<module>sa-token-demo-springboot</module> <module>sa-token-demo-springboot</module>
<module>sa-token-demo-springboot3-redis</module> <module>sa-token-demo-springboot3-redis</module>

View File

@@ -31,6 +31,10 @@ public class TestController {
.setIsShare(false) .setIsShare(false)
.setMaxLoginCount(4) .setMaxLoginCount(4)
.setMaxTryTimes(12) .setMaxTryTimes(12)
.setTerminalExtra("deviceSimpleTitle", "XiaoMi 15 Ultra")
.setTerminalExtra("loginAddress", "浙江省杭州市西湖区")
.setTerminalExtra("loginIp", "127.0.0.1")
.setTerminalExtra("loginTime", SaFoxUtil.formatDate(new Date()))
); );
return SaResult.ok("登录成功"); return SaResult.ok("登录成功");
} }