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;
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<String, Object> 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<String, Object> 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<String, Object> getExtraData() {
return this.extraData;
}
/**
* 设置 此客户端登录的挂载数据
*
* @param tag /
* @param extraData /
* @return 对象自身
*/
public SaTerminalInfo setTag(Object tag) {
this.tag = tag;
public SaTerminalInfo setExtraData(Map<String, Object> 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 +
"]";
}

View File

@@ -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<String, Object> tokenSignTag) {
return create().setTerminalExtraData(tokenSignTag);
}
/**

View File

@@ -59,9 +59,9 @@ public class SaLoginParameter {
private String token;
/**
* 本次登录挂载到 SaTerminalInfo 的自定义数据
* 本次登录挂载到 SaTerminalInfo 的自定义扩展数据
*/
private Object terminalTag;
private Map<String, Object> 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<String, Object> getTerminalExtraData() {
return this.terminalExtraData;
}
/**
* 设置 本次登录挂载到 SaTerminalInfo 的自定义数据
* 设置 本次登录挂载到 SaTerminalInfo 的自定义扩展数据
*
* @param terminalTag 本次登录挂载到 SaTerminalInfo 的自定义数据
* @param terminalExtraData /
* @return 对象自身
*/
public SaLoginParameter setTerminalTag(Object terminalTag) {
this.terminalTag = terminalTag;
public SaLoginParameter setTerminalExtraData(Map<String, Object> terminalExtraData) {
this.terminalExtraData = terminalExtraData;
return this;
}
@@ -442,7 +472,7 @@ public class SaLoginParameter {
+ ", extraData=" + extraData
+ ", token=" + token
+ ", isWriteHeader=" + isWriteHeader
+ ", terminalTag=" + terminalTag
+ ", terminalTag=" + terminalExtraData
+ "]";
}

View File

@@ -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);