mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-04-05 17:37:53 +08:00
refactor: SaLoginModel -> SaLoginParameter
This commit is contained in:
parent
ce74d5f41f
commit
0743b67cf8
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
||||
/**
|
||||
* 每次注销时触发
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
||||
}
|
||||
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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
|
@ -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());
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ------------------- 过期方法 -------------------
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.pj.satoken;
|
||||
|
||||
import cn.dev33.satoken.listener.SaTokenListener;
|
||||
import cn.dev33.satoken.stp.SaLoginModel;
|
||||
import cn.dev33.satoken.stp.SaLoginParameter;
|
||||
|
||||
/**
|
||||
* Sa-Token 自定义侦听器的实现
|
||||
@ -14,7 +14,7 @@ public class MySaTokenListener 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) {
|
||||
System.out.println("---------- 自定义侦听器实现 doLogin");
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@ import cn.dev33.satoken.fun.SaFunction;
|
||||
import cn.dev33.satoken.listener.SaTokenEventCenter;
|
||||
import cn.dev33.satoken.session.SaSession;
|
||||
import cn.dev33.satoken.session.TokenSign;
|
||||
import cn.dev33.satoken.stp.SaLoginModel;
|
||||
import cn.dev33.satoken.stp.SaLoginParameter;
|
||||
import cn.dev33.satoken.stp.SaTokenInfo;
|
||||
import cn.dev33.satoken.stp.StpLogic;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -107,10 +107,10 @@ public class StpUserUtil {
|
||||
* 在当前会话写入指定 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);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -188,10 +188,10 @@ public class StpUserUtil {
|
||||
* 会话登录,并指定所有登录参数 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);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -208,11 +208,11 @@ public class StpUserUtil {
|
||||
* 创建指定账号 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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4,7 +4,7 @@ import cn.dev33.satoken.SaManager;
|
||||
import cn.dev33.satoken.fun.SaFunction;
|
||||
import cn.dev33.satoken.listener.SaTokenEventCenter;
|
||||
import cn.dev33.satoken.session.SaSession;
|
||||
import cn.dev33.satoken.stp.SaLoginModel;
|
||||
import cn.dev33.satoken.stp.SaLoginParameter;
|
||||
import cn.dev33.satoken.stp.SaTokenInfo;
|
||||
import cn.dev33.satoken.stp.StpLogic;
|
||||
|
||||
@ -104,10 +104,10 @@ public class StpUserUtil {
|
||||
* 在当前会话写入指定 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);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -185,10 +185,10 @@ public class StpUserUtil {
|
||||
* 会话登录,并指定所有登录参数 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);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -205,11 +205,11 @@ public class StpUserUtil {
|
||||
* 创建指定账号 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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3,7 +3,7 @@ package com.pj.test;
|
||||
import cn.dev33.satoken.annotation.SaCheckHttpDigest;
|
||||
import cn.dev33.satoken.context.SaHolder;
|
||||
import cn.dev33.satoken.spring.SpringMVCUtil;
|
||||
import cn.dev33.satoken.stp.SaLoginConfig;
|
||||
import cn.dev33.satoken.stp.SaLoginParameter;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.dev33.satoken.util.SaFoxUtil;
|
||||
import cn.dev33.satoken.util.SaResult;
|
||||
@ -26,7 +26,7 @@ public class TestController {
|
||||
// 测试登录 ---- http://localhost:8081/test/login
|
||||
@RequestMapping("login")
|
||||
public SaResult login(@RequestParam(defaultValue = "10001") long id) {
|
||||
StpUtil.login(id, SaLoginConfig.setActiveTimeout(-1));
|
||||
StpUtil.login(id, new SaLoginParameter().setActiveTimeout(-1));
|
||||
return SaResult.ok("登录成功");
|
||||
}
|
||||
|
||||
|
@ -23,15 +23,15 @@ StpUtil.getTokenInfo(); // 获取当前 Token 的详细参数。
|
||||
StpUtil.login(10001); // 会话登录
|
||||
StpUtil.login(10001, "APP"); // 会话登录,并指定设备类型
|
||||
StpUtil.login(10001, true); // 会话登录,并指定是否 [记住我]
|
||||
StpUtil.login(10001, loginModel); // 会话登录,并指定所有登录参数Model
|
||||
StpUtil.login(10001, loginParameter); // 会话登录,并指定所有登录参数Model
|
||||
StpUtil.createLoginSession(10001); // 创建指定账号id的登录会话,此方法不会将 Token 注入到上下文
|
||||
StpUtil.createLoginSession(10001, loginModel); // 创建指定账号id的登录会话,此方法不会将 Token 注入到上下文
|
||||
StpUtil.createLoginSession(10001, loginParameter); // 创建指定账号id的登录会话,此方法不会将 Token 注入到上下文
|
||||
```
|
||||
|
||||
SaLoginModel 配置示例:
|
||||
SaLoginParameter 配置示例:
|
||||
``` java
|
||||
// SaLoginModel 配置登录相关参数
|
||||
StpUtil.login(10001, new SaLoginModel()
|
||||
// SaLoginParameter 配置登录相关参数
|
||||
StpUtil.login(10001, new SaLoginParameter()
|
||||
.setDevice("PC") // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型
|
||||
.setIsLastingCookie(true) // 是否为持久Cookie(临时Cookie在浏览器关闭时会自动删除,持久Cookie在重新打开后依然存在)
|
||||
.setTimeout(60 * 60 * 24 * 7) // 指定此次登录token的有效期, 单位:秒 (如未指定,自动取全局配置的 timeout 值)
|
||||
|
@ -44,7 +44,7 @@ public void configOAuth2Server(SaOAuth2ServerConfig oauth2Server) {
|
||||
|
||||
|
||||
### OAuth2-Client 数据互通
|
||||
除了Server端,Client端也可以打通 `access_token` 与 `satoken` 会话。做法是在 Client 端拿到 `access_token` 后进行登录时,使用 `SaLoginModel` 预定登录生成的 Token 值
|
||||
除了Server端,Client端也可以打通 `access_token` 与 `satoken` 会话。做法是在 Client 端拿到 `access_token` 后进行登录时,使用 `SaLoginParameter` 预定登录生成的 Token 值
|
||||
|
||||
``` java
|
||||
// 1. 获取到access_token
|
||||
|
@ -33,7 +33,7 @@ public class MySaTokenListener 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) {
|
||||
System.out.println("---------- 自定义侦听器实现 doLogin");
|
||||
}
|
||||
|
||||
@ -171,7 +171,7 @@ public class MySaTokenListener extends SaTokenListenerForSimple {
|
||||
*/
|
||||
/** 每次登录时触发 */
|
||||
@Override
|
||||
public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginModel loginModel) {
|
||||
public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginParameter loginParameter) {
|
||||
System.out.println("---------- 自定义侦听器实现 doLogin");
|
||||
}
|
||||
}
|
||||
@ -182,7 +182,7 @@ public class MySaTokenListener extends SaTokenListenerForSimple {
|
||||
// 登录时触发
|
||||
SaTokenEventCenter.registerListener(new SaTokenListenerForSimple() {
|
||||
@Override
|
||||
public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginModel loginModel) {
|
||||
public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginParameter loginParameter) {
|
||||
System.out.println("---------------- doLogin");
|
||||
}
|
||||
});
|
||||
@ -195,7 +195,7 @@ SaTokenEventCenter.registerListener(new SaTokenListenerForSimple() {
|
||||
// 登录时触发
|
||||
SaTokenEventCenter.registerListener(new SaTokenListenerForSimple() {
|
||||
@Override
|
||||
public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginModel loginModel) {
|
||||
public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginParameter loginParameter) {
|
||||
try {
|
||||
// 不安全代码需要写在 try-catch 里
|
||||
// ......
|
||||
|
@ -67,11 +67,11 @@ Remember me, it's too easy!
|
||||
``` java
|
||||
// 示例1:
|
||||
// 指定token有效期(单位: 秒),如下所示token七天有效
|
||||
StpUtil.login(10001, new SaLoginModel().setTimeout(60 * 60 * 24 * 7));
|
||||
StpUtil.login(10001, new SaLoginParameter().setTimeout(60 * 60 * 24 * 7));
|
||||
|
||||
// ----------------------- 示例2:所有参数
|
||||
// `SaLoginModel`为登录参数Model,其有诸多参数决定登录时的各种逻辑,例如:
|
||||
StpUtil.login(10001, new SaLoginModel()
|
||||
// `SaLoginParameter`为登录参数Model,其有诸多参数决定登录时的各种逻辑,例如:
|
||||
StpUtil.login(10001, new SaLoginParameter()
|
||||
.setDevice("PC") // 此次登录的客户端设备类型, 用于[同端互斥登录]时指定此次登录的设备类型
|
||||
.setIsLastingCookie(true) // 是否为持久Cookie(临时Cookie在浏览器关闭时会自动删除,持久Cookie在重新打开后依然存在)
|
||||
.setTimeout(60 * 60 * 24 * 7) // 指定此次登录token的有效期, 单位:秒 (如未指定,自动取全局配置的 timeout 值)
|
||||
|
@ -22,7 +22,7 @@ import cn.dev33.satoken.exception.NotLoginException;
|
||||
import cn.dev33.satoken.jwt.error.SaJwtErrorCode;
|
||||
import cn.dev33.satoken.jwt.exception.SaJwtException;
|
||||
import cn.dev33.satoken.listener.SaTokenEventCenter;
|
||||
import cn.dev33.satoken.stp.SaLoginModel;
|
||||
import cn.dev33.satoken.stp.SaLoginParameter;
|
||||
import cn.dev33.satoken.stp.SaTokenInfo;
|
||||
import cn.dev33.satoken.stp.StpLogic;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
@ -102,23 +102,20 @@ public class StpLogicJwtForStateless extends StpLogic {
|
||||
/**
|
||||
* 创建指定账号id的登录会话
|
||||
* @param id 登录id,建议的类型:(long | int | String)
|
||||
* @param loginModel 此次登录的参数Model
|
||||
* @param loginParameter 此次登录的参数Model
|
||||
* @return 返回会话令牌
|
||||
*/
|
||||
@Override
|
||||
public String createLoginSession(Object id, SaLoginModel loginModel) {
|
||||
public String createLoginSession(Object id, SaLoginParameter loginParameter) {
|
||||
|
||||
// 1、先检查一下,传入的参数是否有效
|
||||
checkLoginArgs(id, loginModel);
|
||||
checkLoginArgs(id, loginParameter);
|
||||
|
||||
// 2、初始化 loginModel ,给一些参数补上默认值
|
||||
loginModel.build(getConfigOrGlobal());
|
||||
|
||||
// 3、生成一个token
|
||||
String tokenValue = createTokenValue(id, loginModel.getDeviceOrDefault(), loginModel.getTimeout(), loginModel.getExtraData());
|
||||
String tokenValue = createTokenValue(id, loginParameter.getDevice(), loginParameter.getTimeout(), loginParameter.getExtraData());
|
||||
|
||||
// 4、$$ 发布事件:账号xxx 登录成功
|
||||
SaTokenEventCenter.doLogin(loginType, id, tokenValue, loginModel);
|
||||
SaTokenEventCenter.doLogin(loginType, id, tokenValue, loginParameter);
|
||||
|
||||
// 5、返回
|
||||
return tokenValue;
|
||||
|
@ -22,7 +22,7 @@ import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import cn.dev33.satoken.stp.SaLoginConfig;
|
||||
import cn.dev33.satoken.stp.SaLoginModel;
|
||||
import cn.dev33.satoken.stp.SaLoginParameter;
|
||||
import cn.dev33.satoken.stp.SaTokenInfo;
|
||||
import cn.dev33.satoken.util.SaTokenConsts;
|
||||
|
||||
@ -65,7 +65,7 @@ public class TokenInfoTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoginModel() {
|
||||
public void testLoginParameter() {
|
||||
Assertions.assertEquals(SaLoginConfig.setDevice("PC").getDevice(), "PC");
|
||||
Assertions.assertEquals(SaLoginConfig.setIsLastingCookie(false).getIsLastingCookie(), false);
|
||||
Assertions.assertEquals(SaLoginConfig.setTimeout(1600).getTimeout(), 1600);
|
||||
@ -74,19 +74,19 @@ public class TokenInfoTest {
|
||||
|
||||
Map<String, Object> extraData = new HashMap<>();
|
||||
extraData.put("age", 20);
|
||||
SaLoginModel lm = SaLoginConfig.setExtraData(extraData);
|
||||
SaLoginParameter lm = SaLoginConfig.setExtraData(extraData);
|
||||
Assertions.assertEquals(lm.getExtraData(), extraData);
|
||||
Assertions.assertEquals(lm.getExtra("age"), 20);
|
||||
Assertions.assertTrue(lm.isSetExtraData());
|
||||
Assertions.assertNotNull(lm.toString());
|
||||
|
||||
// 计算 CookieTimeout
|
||||
SaLoginModel loginModel = SaLoginModel
|
||||
SaLoginParameter loginParameter = SaLoginParameter
|
||||
.create()
|
||||
.setTimeout(-1);
|
||||
loginModel.build();
|
||||
Assertions.assertEquals(loginModel.getCookieTimeout(), Integer.MAX_VALUE);
|
||||
Assertions.assertEquals(loginModel.getDeviceOrDefault(), SaTokenConsts.DEFAULT_LOGIN_DEVICE);
|
||||
loginParameter.build();
|
||||
Assertions.assertEquals(loginParameter.getCookieTimeout(), Integer.MAX_VALUE);
|
||||
Assertions.assertEquals(loginParameter.getDeviceOrDefault(), SaTokenConsts.DEFAULT_LOGIN_DEVICE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ import cn.dev33.satoken.session.SaSession;
|
||||
import cn.dev33.satoken.spring.SpringMVCUtil;
|
||||
import cn.dev33.satoken.spring.pathmatch.SaPathMatcherHolder;
|
||||
import cn.dev33.satoken.stp.SaLoginConfig;
|
||||
import cn.dev33.satoken.stp.SaLoginModel;
|
||||
import cn.dev33.satoken.stp.SaLoginParameter;
|
||||
import cn.dev33.satoken.stp.StpLogic;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.dev33.satoken.util.SaTokenConsts;
|
||||
@ -646,7 +646,7 @@ public class BasicsTest {
|
||||
@Test
|
||||
public void testDoLoginBySetToken() {
|
||||
// 预定 Token 登录
|
||||
StpUtil.login(10001, new SaLoginModel().setToken("qwer-qwer-qwer-qwer"));
|
||||
StpUtil.login(10001, new SaLoginParameter().setToken("qwer-qwer-qwer-qwer"));
|
||||
Assertions.assertEquals(StpUtil.getTokenValue(), "qwer-qwer-qwer-qwer");
|
||||
|
||||
// 注销后,应该清除Token
|
||||
@ -663,7 +663,7 @@ public class BasicsTest {
|
||||
Assertions.assertNull(StpUtil.getTokenValue());
|
||||
|
||||
// 无上下文注入的登录
|
||||
String token = StpUtil.createLoginSession(10001, new SaLoginModel());
|
||||
String token = StpUtil.createLoginSession(10001, new SaLoginParameter());
|
||||
Assertions.assertNull(StpUtil.getTokenValue());
|
||||
|
||||
// 手动写入
|
||||
|
Loading…
Reference in New Issue
Block a user