mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-10-21 11:07:23 +08:00
feat: SaTerminalInfo 新增 extraData 自定义扩展数据设置
This commit is contained in:
@@ -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 +
|
||||||
"]";
|
"]";
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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
|
||||||
+ "]";
|
+ "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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>
|
||||||
|
@@ -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("登录成功");
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user