refactor: SaLoginModel -> SaLoginParameter

This commit is contained in:
click33
2025-03-01 21:15:37 +08:00
parent ce74d5f41f
commit 0743b67cf8
19 changed files with 212 additions and 194 deletions

View File

@@ -22,7 +22,7 @@ import cn.dev33.satoken.annotation.handler.SaAnnotationHandlerInterface;
import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.error.SaErrorCode;
import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.SaLoginParameter;
import cn.dev33.satoken.stp.StpLogic;
/**
@@ -149,11 +149,11 @@ public class SaTokenEventCenter {
* @param loginType 账号类别
* @param loginId 账号id
* @param tokenValue 本次登录产生的 token 值
* @param loginModel 登录参数
* @param loginParameter 登录参数
*/
public static void doLogin(String loginType, Object loginId, String tokenValue, SaLoginModel loginModel) {
public static void doLogin(String loginType, Object loginId, String tokenValue, SaLoginParameter loginParameter) {
for (SaTokenListener listener : listenerList) {
listener.doLogin(loginType, loginId, tokenValue, loginModel);
listener.doLogin(loginType, loginId, tokenValue, loginParameter);
}
}

View File

@@ -17,7 +17,7 @@ package cn.dev33.satoken.listener;
import cn.dev33.satoken.annotation.handler.SaAnnotationHandlerInterface;
import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.SaLoginParameter;
import cn.dev33.satoken.stp.StpLogic;
/**
@@ -35,9 +35,9 @@ public interface SaTokenListener {
* @param loginType 账号类别
* @param loginId 账号id
* @param tokenValue 本次登录产生的 token 值
* @param loginModel 登录参数
* @param loginParameter 登录参数
*/
void doLogin(String loginType, Object loginId, String tokenValue, SaLoginModel loginModel);
void doLogin(String loginType, Object loginId, String tokenValue, SaLoginParameter loginParameter);
/**
* 每次注销时触发

View File

@@ -17,7 +17,7 @@ package cn.dev33.satoken.listener;
import cn.dev33.satoken.annotation.handler.SaAnnotationHandlerInterface;
import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.SaLoginParameter;
import cn.dev33.satoken.stp.StpLogic;
import cn.dev33.satoken.util.SaFoxUtil;
@@ -35,7 +35,7 @@ public class SaTokenListenerForLog implements SaTokenListener {
* 每次登录时触发
*/
@Override
public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginModel loginModel) {
public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginParameter loginParameter) {
log.info("账号 {} 登录成功 (loginType={}), 会话凭证 token={}", loginId, loginType, tokenValue);
}

View File

@@ -15,7 +15,7 @@
*/
package cn.dev33.satoken.listener;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.SaLoginParameter;
/**
* Sa-Token 侦听器,默认空实现
@@ -28,7 +28,7 @@ import cn.dev33.satoken.stp.SaLoginModel;
public class SaTokenListenerForSimple implements SaTokenListener {
@Override
public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginModel loginModel) {
public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginParameter loginParameter) {
}

View File

@@ -15,22 +15,27 @@
*/
package cn.dev33.satoken.stp;
import cn.dev33.satoken.SaManager;
import java.util.Map;
/**
* 快速、简洁的构建:调用 `StpUtil.login()` 时的 [ 配置参数 SaLoginModel ]
* <h2> 请更换为 new SaLoginParameter() </h2>
*
* 快速、简洁的构建:调用 `StpUtil.login()` 时的 [ 配置参数 SaLoginParameter ]
*
* <pre>
* // 例如:在登录时指定 token 有效期为七天,代码如下:
* StpUtil.login(10001, SaLoginConfig.setTimeout(60 * 60 * 24 * 7));
*
* // 上面的代码与下面的代码等价
* StpUtil.login(10001, new SaLoginModel().setTimeout(60 * 60 * 24 * 7));
* StpUtil.login(10001, new SaLoginParameter().setTimeout(60 * 60 * 24 * 7));
* </pre>
*
* @author click33
* @since 1.29.0
*/
@Deprecated
public class SaLoginConfig {
private SaLoginConfig() {
@@ -40,7 +45,7 @@ public class SaLoginConfig {
* @param device 此次登录的客户端设备类型
* @return 登录参数 Model
*/
public static SaLoginModel setDevice(String device) {
public static SaLoginParameter setDevice(String device) {
return create().setDevice(device);
}
@@ -48,7 +53,7 @@ public class SaLoginConfig {
* @param isLastingCookie 是否为持久Cookie临时Cookie在浏览器关闭时会自动删除持久Cookie在重新打开后依然存在
* @return 登录参数 Model
*/
public static SaLoginModel setIsLastingCookie(Boolean isLastingCookie) {
public static SaLoginParameter setIsLastingCookie(Boolean isLastingCookie) {
return create().setIsLastingCookie(isLastingCookie);
}
@@ -56,7 +61,7 @@ public class SaLoginConfig {
* @param timeout 指定此次登录token的有效期, 单位:秒 如未指定自动取全局配置的timeout值
* @return 登录参数 Model
*/
public static SaLoginModel setTimeout(long timeout) {
public static SaLoginParameter setTimeout(long timeout) {
return create().setTimeout(timeout);
}
@@ -64,7 +69,7 @@ public class SaLoginConfig {
* @param activeTimeout 指定此次登录 token 最低活跃频率,单位:秒(如未指定,自动取全局配置的 activeTimeout 值)
* @return 对象自身
*/
public static SaLoginModel setActiveTimeout(long activeTimeout) {
public static SaLoginParameter setActiveTimeout(long activeTimeout) {
return create().setActiveTimeout(activeTimeout);
}
@@ -72,7 +77,7 @@ public class SaLoginConfig {
* @param extraData 扩展信息只在jwt模式下生效
* @return 登录参数 Model
*/
public static SaLoginModel setExtraData(Map<String, Object> extraData) {
public static SaLoginParameter setExtraData(Map<String, Object> extraData) {
return create().setExtraData(extraData);
}
@@ -80,7 +85,7 @@ public class SaLoginConfig {
* @param token 预定Token预定本次登录生成的Token值
* @return 登录参数 Model
*/
public static SaLoginModel setToken(String token) {
public static SaLoginParameter setToken(String token) {
return create().setToken(token);
}
@@ -90,7 +95,7 @@ public class SaLoginConfig {
* @param value 值
* @return 登录参数 Model
*/
public static SaLoginModel setExtra(String key, Object value) {
public static SaLoginParameter setExtra(String key, Object value) {
return create().setExtra(key, value);
}
@@ -98,7 +103,7 @@ public class SaLoginConfig {
* @param isWriteHeader 是否在登录后将 Token 写入到响应头
* @return 登录参数 Model
*/
public static SaLoginModel setIsWriteHeader(Boolean isWriteHeader) {
public static SaLoginParameter setIsWriteHeader(Boolean isWriteHeader) {
return create().setIsWriteHeader(isWriteHeader);
}
@@ -108,16 +113,16 @@ public class SaLoginConfig {
* @param tokenSignTag /
* @return 登录参数 Model
*/
public static SaLoginModel setTokenSignTag(Object tokenSignTag) {
public static SaLoginParameter setTokenSignTag(Object tokenSignTag) {
return create().setTokenSignTag(tokenSignTag);
}
/**
* 静态方法获取一个 SaLoginModel 对象
* @return SaLoginModel 对象
* 静态方法获取一个 SaLoginParameter 对象
* @return SaLoginParameter 对象
*/
public static SaLoginModel create() {
return new SaLoginModel();
public static SaLoginParameter create() {
return new SaLoginParameter(SaManager.getConfig());
}
}

View File

@@ -28,13 +28,18 @@ import java.util.Map;
*
* <pre>
* // 例如在登录时指定 token 有效期为七天代码如下
* StpUtil.login(10001, new SaLoginModel().setTimeout(60 * 60 * 24 * 7));
* StpUtil.login(10001, new SaLoginParameter().setTimeout(60 * 60 * 24 * 7));
* </pre>
*
* @author click33
* @since 1.13.2
*/
public class SaLoginModel {
public class SaLoginParameter {
// /**
// * 该对象是否已构造完毕
// */
// public boolean isBuild = false;
// --------- 单独参数
@@ -82,7 +87,30 @@ public class SaLoginModel {
private Boolean isWriteHeader;
// ------ 附加方法
// ------ 附加方法
public SaLoginParameter() {
this(SaManager.getConfig());
}
public SaLoginParameter(SaTokenConfig config) {
setDefaultValues(config);
}
/**
* 根据 SaTokenConfig 对象初始化默认值
*
* @param config 使用的配置对象
* @return 对象自身
*/
public SaLoginParameter setDefaultValues(SaTokenConfig config) {
this.device = SaTokenConsts.DEFAULT_LOGIN_DEVICE;
this.isLastingCookie = config.getIsLastingCookie();
this.timeout = config.getTimeout();
this.isWriteHeader = config.getIsWriteHeader();
return this;
}
/**
* 写入扩展数据只在jwt模式下生效
@@ -90,7 +118,7 @@ public class SaLoginModel {
* @param value
* @return 对象自身
*/
public SaLoginModel setExtra(String key, Object value) {
public SaLoginParameter setExtra(String key, Object value) {
if(this.extraData == null) {
this.extraData = new LinkedHashMap<>();
}
@@ -119,7 +147,8 @@ public class SaLoginModel {
}
/**
* @return Cookie时长
* 计算 Cookie 时长
* @return /
*/
public int getCookieTimeout() {
if( ! getIsLastingCookie()) {
@@ -143,40 +172,11 @@ public class SaLoginModel {
}
/**
* 构建对象初始化默认值
* @return 对象自身
* 静态方法获取一个 SaLoginParameter 对象
* @return SaLoginParameter 对象
*/
public SaLoginModel build() {
return build(SaManager.getConfig());
}
/**
* 构建对象初始化默认值
* @param config 配置对象
* @return 对象自身
*/
public SaLoginModel build(SaTokenConfig config) {
// if(device == null) {
// device = SaTokenConsts.DEFAULT_LOGIN_DEVICE;
// }
if(isLastingCookie == null) {
isLastingCookie = config.getIsLastingCookie();
}
if(timeout == null) {
timeout = config.getTimeout();
}
if(isWriteHeader == null) {
isWriteHeader = config.getIsWriteHeader();
}
return this;
}
/**
* 静态方法获取一个 SaLoginModel 对象
* @return SaLoginModel 对象
*/
public static SaLoginModel create() {
return new SaLoginModel();
public static SaLoginParameter create() {
return new SaLoginParameter(SaManager.getConfig());
}
@@ -196,7 +196,7 @@ public class SaLoginModel {
* @param device 此次登录的客户端设备类型
* @return 对象自身
*/
public SaLoginModel setDevice(String device) {
public SaLoginParameter setDevice(String device) {
this.device = device;
return this;
}
@@ -212,7 +212,7 @@ public class SaLoginModel {
* @param isLastingCookie 是否为持久Cookie临时Cookie在浏览器关闭时会自动删除持久Cookie在重新打开后依然存在
* @return 对象自身
*/
public SaLoginModel setIsLastingCookie(Boolean isLastingCookie) {
public SaLoginParameter setIsLastingCookie(Boolean isLastingCookie) {
this.isLastingCookie = isLastingCookie;
return this;
}
@@ -228,7 +228,7 @@ public class SaLoginModel {
* @param timeout 指定此次登录 token 有效期单位 如未指定自动取全局配置的 timeout
* @return 对象自身
*/
public SaLoginModel setTimeout(long timeout) {
public SaLoginParameter setTimeout(long timeout) {
this.timeout = timeout;
return this;
}
@@ -245,7 +245,7 @@ public class SaLoginModel {
* @param activeTimeout 指定此次登录 token 最低活跃频率单位如未指定则使用全局配置的 activeTimeout
* @return 对象自身
*/
public SaLoginModel setActiveTimeout(long activeTimeout) {
public SaLoginParameter setActiveTimeout(long activeTimeout) {
this.activeTimeout = activeTimeout;
return this;
}
@@ -261,7 +261,7 @@ public class SaLoginModel {
* @param extraData 扩展信息只在jwt模式下生效
* @return 对象自身
*/
public SaLoginModel setExtraData(Map<String, Object> extraData) {
public SaLoginParameter setExtraData(Map<String, Object> extraData) {
this.extraData = extraData;
return this;
}
@@ -277,7 +277,7 @@ public class SaLoginModel {
* @param token 预定Token预定本次登录生成的Token值
* @return 对象自身
*/
public SaLoginModel setToken(String token) {
public SaLoginParameter setToken(String token) {
this.token = token;
return this;
}
@@ -293,7 +293,7 @@ public class SaLoginModel {
* @param isWriteHeader 是否在登录后将 Token 写入到响应头
* @return 对象自身
*/
public SaLoginModel setIsWriteHeader(Boolean isWriteHeader) {
public SaLoginParameter setIsWriteHeader(Boolean isWriteHeader) {
this.isWriteHeader = isWriteHeader;
return this;
}
@@ -313,7 +313,7 @@ public class SaLoginModel {
* @param tokenSignTag 本次登录挂载到 TokenSign 的数据
* @return 对象自身
*/
public SaLoginModel setTokenSignTag(Object tokenSignTag) {
public SaLoginParameter setTokenSignTag(Object tokenSignTag) {
this.tokenSignTag = tokenSignTag;
return this;
}
@@ -323,7 +323,7 @@ public class SaLoginModel {
*/
@Override
public String toString() {
return "SaLoginModel ["
return "SaLoginParameter ["
+ "device=" + device
+ ", isLastingCookie=" + isLastingCookie
+ ", timeout=" + timeout

View File

@@ -169,7 +169,7 @@ public class StpLogic {
* @param tokenValue token 值
*/
public void setTokenValue(String tokenValue){
setTokenValue(tokenValue, new SaLoginModel().setTimeout(getConfigOrGlobal().getTimeout()));
setTokenValue(tokenValue, createSaLoginParameter().setTimeout(getConfigOrGlobal().getTimeout()));
}
/**
@@ -179,35 +179,32 @@ public class StpLogic {
* @param cookieTimeout Cookie存活时间(秒)
*/
public void setTokenValue(String tokenValue, int cookieTimeout){
setTokenValue(tokenValue, new SaLoginModel().setTimeout(cookieTimeout));
setTokenValue(tokenValue, createSaLoginParameter().setTimeout(cookieTimeout));
}
/**
* 在当前会话写入指定 token 值
*
* @param tokenValue token 值
* @param loginModel 登录参数
* @param loginParameter 登录参数
*/
public void setTokenValue(String tokenValue, SaLoginModel loginModel){
public void setTokenValue(String tokenValue, SaLoginParameter loginParameter){
// 先判断一下,如果提供 token 为空,则不执行任何动作
if(SaFoxUtil.isEmpty(tokenValue)) {
return;
}
// 构建一下
loginModel.build(getConfigOrGlobal());
// 1、将 token 写入到当前请求的 Storage 存储器里
setTokenValueToStorage(tokenValue);
// 2. 将 token 写入到当前会话的 Cookie 里
if (getConfigOrGlobal().getIsReadCookie()) {
setTokenValueToCookie(tokenValue, loginModel.getCookieTimeout());
setTokenValueToCookie(tokenValue, loginParameter.getCookieTimeout());
}
// 3. 将 token 写入到当前请求的响应头中
if(loginModel.getIsWriteHeader()) {
if(loginParameter.getIsWriteHeader()) {
setTokenValueToResponseHeader(tokenValue);
}
}
@@ -399,7 +396,7 @@ public class StpLogic {
* @param id 账号id建议的类型long | int | String
*/
public void login(Object id) {
login(id, new SaLoginModel());
login(id, createSaLoginParameter());
}
/**
@@ -409,7 +406,7 @@ public class StpLogic {
* @param device 设备类型
*/
public void login(Object id, String device) {
login(id, new SaLoginModel().setDevice(device));
login(id, createSaLoginParameter().setDevice(device));
}
/**
@@ -419,7 +416,7 @@ public class StpLogic {
* @param isLastingCookie 是否为持久Cookie值为 true 时记住我,值为 false 时关闭浏览器需要重新登录
*/
public void login(Object id, boolean isLastingCookie) {
login(id, new SaLoginModel().setIsLastingCookie(isLastingCookie));
login(id, createSaLoginParameter().setIsLastingCookie(isLastingCookie));
}
/**
@@ -429,21 +426,21 @@ public class StpLogic {
* @param timeout 此次登录 token 的有效期, 单位:秒
*/
public void login(Object id, long timeout) {
login(id, new SaLoginModel().setTimeout(timeout));
login(id, createSaLoginParameter().setTimeout(timeout));
}
/**
* 会话登录,并指定所有登录参数 Model
*
* @param id 账号id建议的类型long | int | String
* @param loginModel 此次登录的参数Model
* @param loginParameter 此次登录的参数Model
*/
public void login(Object id, SaLoginModel loginModel) {
public void login(Object id, SaLoginParameter loginParameter) {
// 1、创建会话
String token = createLoginSession(id, loginModel);
String token = createLoginSession(id, loginParameter);
// 2、在当前客户端注入 token
setTokenValue(token, loginModel);
setTokenValue(token, loginParameter);
}
/**
@@ -453,59 +450,57 @@ public class StpLogic {
* @return 返回会话令牌
*/
public String createLoginSession(Object id) {
return createLoginSession(id, new SaLoginModel());
return createLoginSession(id, createSaLoginParameter());
}
/**
* 创建指定账号 id 的登录会话数据
*
* @param id 账号id建议的类型long | int | String
* @param loginModel 此次登录的参数Model
* @param loginParameter 此次登录的参数Model
* @return 返回会话令牌
*/
public String createLoginSession(Object id, SaLoginModel loginModel) {
public String createLoginSession(Object id, SaLoginParameter loginParameter) {
SaTokenConfig config = getConfigOrGlobal();
// 1、先检查一下传入的参数是否有效
checkLoginArgs(id, loginModel);
// 2、初始化 loginModel ,给一些参数补上默认值
SaTokenConfig config = getConfigOrGlobal();
loginModel.build(config);
checkLoginArgs(id, loginParameter);
// 3、给这个账号分配一个可用的 token
String tokenValue = distUsableToken(id, loginModel);
// 2、给这个账号分配一个可用的 token
String tokenValue = distUsableToken(id, loginParameter);
// 4、获取此账号的 Account-Session , 续期
SaSession session = getSessionByLoginId(id, true, loginModel.getTimeout());
session.updateMinTimeout(loginModel.getTimeout());
// 3、获取此账号的 Account-Session , 续期
SaSession session = getSessionByLoginId(id, true, loginParameter.getTimeout());
session.updateMinTimeout(loginParameter.getTimeout());
// 5、在 Account-Session 上记录本次登录的 token 签名
TokenSign tokenSign = new TokenSign(tokenValue, loginModel.getDeviceOrDefault(), loginModel.getTokenSignTag());
// 4、在 Account-Session 上记录本次登录的 token 签名
TokenSign tokenSign = new TokenSign(tokenValue, loginParameter.getDevice(), loginParameter.getTokenSignTag());
session.addTokenSign(tokenSign);
// 6、保存 token -> id 的映射关系,方便日后根据 token 找账号 id
saveTokenToIdMapping(tokenValue, id, loginModel.getTimeout());
// 5、保存 token -> id 的映射关系,方便日后根据 token 找账号 id
saveTokenToIdMapping(tokenValue, id, loginParameter.getTimeout());
// 7、写入这个 token 的最后活跃时间 token-last-active
// 6、写入这个 token 的最后活跃时间 token-last-active
if(isOpenCheckActiveTimeout()) {
setLastActiveToNow(tokenValue, loginModel.getActiveTimeout(), loginModel.getTimeout());
setLastActiveToNow(tokenValue, loginParameter.getActiveTimeout(), loginParameter.getTimeout());
}
// 8、如果该 token 对应的 Token-Session 已经存在,则需要给其续期
// 7、如果该 token 对应的 Token-Session 已经存在,则需要给其续期
SaSession tokenSession = getTokenSessionByToken(tokenValue, false);
if(tokenSession != null) {
tokenSession.updateMinTimeout(loginModel.getTimeout());
tokenSession.updateMinTimeout(loginParameter.getTimeout());
}
// 9、$$ 发布全局事件:账号 xxx 登录成功
SaTokenEventCenter.doLogin(loginType, id, tokenValue, loginModel);
// 8、$$ 发布全局事件:账号 xxx 登录成功
SaTokenEventCenter.doLogin(loginType, id, tokenValue, loginParameter);
// 10、检查此账号会话数量是否超出最大值,如果超过,则按照登录时间顺序,把最开始登录的给注销掉
// 9、检查此账号会话数量是否超出最大值,如果超过,则按照登录时间顺序,把最开始登录的给注销掉
if(config.getMaxLoginCount() != -1) {
logoutByMaxLoginCount(id, session, null, config.getMaxLoginCount());
}
// 11、一切处理完毕,返回会话凭证 token
// 10、一切处理完毕,返回会话凭证 token
return tokenValue;
}
@@ -513,21 +508,22 @@ public class StpLogic {
* 为指定账号 id 的登录操作,分配一个可用的 token
*
* @param id 账号id
* @param loginModel 此次登录的参数Model
* @param loginParameter 此次登录的参数Model
* @return 返回 token
*/
protected String distUsableToken(Object id, SaLoginModel loginModel) {
protected String distUsableToken(Object id, SaLoginParameter loginParameter) {
// 1、获取全局配置的 isConcurrent 参数
// 如果配置为:不允许一个账号多地同时登录,则需要先将这个账号的历史登录会话标记为:被顶下线
Boolean isConcurrent = getConfigOrGlobal().getIsConcurrent();
if( ! isConcurrent) {
replaced(id, loginModel.getDevice());
// TODO 此处应该加一个配置决定是只顶掉当前设备类型,还是所有类型
replaced(id, loginParameter.getDevice());
}
// 2、如果调用者预定了要生成的 token则直接返回这个预定的值框架无需再操心了
if(SaFoxUtil.isNotEmpty(loginModel.getToken())) {
return loginModel.getToken();
if(SaFoxUtil.isNotEmpty(loginParameter.getToken())) {
return loginParameter.getToken();
}
// 3、只有在配置了 [ 允许一个账号多地同时登录 ] 时,才尝试复用旧 token这样可以避免不必要地查询节省开销
@@ -537,7 +533,7 @@ public class StpLogic {
if(getConfigOfIsShare()) {
// 根据 账号id + 设备类型,尝试获取旧的 token
String tokenValue = getTokenValueByLoginId(id, loginModel.getDeviceOrDefault());
String tokenValue = getTokenValueByLoginId(id, loginParameter.getDevice());
// 如果有值,那就直接复用
if(SaFoxUtil.isNotEmpty(tokenValue)) {
@@ -554,7 +550,7 @@ public class StpLogic {
"token",
getConfigOfMaxTryTimes(),
() -> {
return createTokenValue(id, loginModel.getDeviceOrDefault(), loginModel.getTimeout(), loginModel.getExtraData());
return createTokenValue(id, loginParameter.getDevice(), loginParameter.getTimeout(), loginParameter.getExtraData());
},
tokenValue -> {
return getLoginIdNotHandle(tokenValue) == null;
@@ -566,9 +562,9 @@ public class StpLogic {
* 校验登录时的参数有效性,如果有问题会打印警告或抛出异常
*
* @param id 账号id
* @param loginModel 此次登录的参数Model
* @param loginParameter 此次登录的参数Model
*/
protected void checkLoginArgs(Object id, SaLoginModel loginModel) {
protected void checkLoginArgs(Object id, SaLoginParameter loginParameter) {
// 1、账号 id 不能为空
if(SaFoxUtil.isEmpty(id)) {
@@ -588,14 +584,13 @@ public class StpLogic {
// 4、判断当前 StpLogic 是否支持 extra 扩展参数
if( ! isSupportExtra()) {
// 如果不支持,开发者却传入了 extra 扩展参数,那么就打印警告信息
Map<String, Object> extraData = loginModel.getExtraData();
if(extraData != null && extraData.size() > 0) {
if(loginParameter.isSetExtraData()) {
SaManager.log.warn("当前 StpLogic 不支持 extra 扩展参数模式,传入的 extra 参数将被忽略");
}
}
// 5、如果全局配置未启动动态 activeTimeout 功能,但是此次登录却传入了 activeTimeout 参数,那么就打印警告信息
if( ! getConfigOrGlobal().getDynamicActiveTimeout() && loginModel.getActiveTimeout() != null) {
if( ! getConfigOrGlobal().getDynamicActiveTimeout() && loginParameter.getActiveTimeout() != null) {
SaManager.log.warn("当前全局配置未开启动态 activeTimeout 功能,传入的 activeTimeout 参数将被忽略");
}
@@ -610,7 +605,7 @@ public class StpLogic {
public String getOrCreateLoginSession(Object id) {
String tokenValue = getTokenValueByLoginId(id);
if(tokenValue == null) {
tokenValue = createLoginSession(id, new SaLoginModel());
tokenValue = createLoginSession(id, createSaLoginParameter());
}
return tokenValue;
}
@@ -2114,7 +2109,7 @@ public class StpLogic {
*/
public String getTokenValueByLoginId(Object loginId, String device) {
List<String> tokenValueList = getTokenValueListByLoginId(loginId, device);
return tokenValueList.size() == 0 ? null : tokenValueList.get(tokenValueList.size() - 1);
return tokenValueList.isEmpty() ? null : tokenValueList.get(tokenValueList.size() - 1);
}
/**
@@ -2895,6 +2890,15 @@ public class StpLogic {
return false;
}
/**
* 根据当前配置对象创建一个 SaLoginParameter 对象
*
* @return /
*/
public SaLoginParameter createSaLoginParameter() {
return new SaLoginParameter(getConfigOrGlobal());
}
// ------------------- 过期方法 -------------------

View File

@@ -117,10 +117,10 @@ public class StpUtil {
* 在当前会话写入指定 token 值
*
* @param tokenValue token 值
* @param loginModel 登录参数
* @param loginParameter 登录参数
*/
public static void setTokenValue(String tokenValue, SaLoginModel loginModel){
stpLogic.setTokenValue(tokenValue, loginModel);
public static void setTokenValue(String tokenValue, SaLoginParameter loginParameter){
stpLogic.setTokenValue(tokenValue, loginParameter);
}
/**
@@ -198,10 +198,10 @@ public class StpUtil {
* 会话登录,并指定所有登录参数 Model
*
* @param id 账号id建议的类型long | int | String
* @param loginModel 此次登录的参数Model
* @param loginParameter 此次登录的参数Model
*/
public static void login(Object id, SaLoginModel loginModel) {
stpLogic.login(id, loginModel);
public static void login(Object id, SaLoginParameter loginParameter) {
stpLogic.login(id, loginParameter);
}
/**
@@ -218,11 +218,11 @@ public class StpUtil {
* 创建指定账号 id 的登录会话数据
*
* @param id 账号id建议的类型long | int | String
* @param loginModel 此次登录的参数Model
* @param loginParameter 此次登录的参数Model
* @return 返回会话令牌
*/
public static String createLoginSession(Object id, SaLoginModel loginModel) {
return stpLogic.createLoginSession(id, loginModel);
public static String createLoginSession(Object id, SaLoginParameter loginParameter) {
return stpLogic.createLoginSession(id, loginParameter);
}
/**
@@ -1260,4 +1260,16 @@ public class StpUtil {
stpLogic.closeSafe(service);
}
// ------------------- Bean 对象、字段代理 -------------------
/**
* 根据当前配置对象创建一个 SaLoginParameter 对象
*
* @return /
*/
public static SaLoginParameter createSaLoginParameter() {
return stpLogic.createSaLoginParameter();
}
}