mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-04-05 17:37:53 +08:00
feat: SaLoginParameter 支持配置 isShare
This commit is contained in:
parent
16cf2db334
commit
3bc9e88645
sa-token-core/src/main/java/cn/dev33/satoken/stp
sa-token-demo/sa-token-demo-test/src/main/java/com/pj/test
sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt
@ -81,6 +81,11 @@ public class SaLoginParameter {
|
||||
*/
|
||||
private Boolean isConcurrent;
|
||||
|
||||
/**
|
||||
* 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)
|
||||
*/
|
||||
private Boolean isShare = true;
|
||||
|
||||
/**
|
||||
* 是否为持久Cookie(临时Cookie在浏览器关闭时会自动删除,持久Cookie在重新打开后依然存在)
|
||||
*/
|
||||
@ -111,6 +116,7 @@ public class SaLoginParameter {
|
||||
this.device = SaTokenConsts.DEFAULT_LOGIN_DEVICE;
|
||||
this.timeout = config.getTimeout();
|
||||
this.isConcurrent = config.getIsConcurrent();
|
||||
this.isShare = config.getIsShare();
|
||||
this.isLastingCookie = config.getIsLastingCookie();
|
||||
this.isWriteHeader = config.getIsWriteHeader();
|
||||
return this;
|
||||
@ -271,6 +277,22 @@ public class SaLoginParameter {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个token, 为 false 时每次登录新建一个 token)
|
||||
*/
|
||||
public Boolean getIsShare() {
|
||||
return isShare;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param isShare 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个token, 为 false 时每次登录新建一个 token)
|
||||
* @return 对象自身
|
||||
*/
|
||||
public SaLoginParameter setIsShare(Boolean isShare) {
|
||||
this.isShare = isShare;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return 扩展信息(只在jwt模式下生效)
|
||||
*/
|
||||
@ -349,6 +371,8 @@ public class SaLoginParameter {
|
||||
+ ", isLastingCookie=" + isLastingCookie
|
||||
+ ", timeout=" + timeout
|
||||
+ ", activeTimeout=" + activeTimeout
|
||||
+ ", isConcurrent=" + isConcurrent
|
||||
+ ", isShare=" + isShare
|
||||
+ ", extraData=" + extraData
|
||||
+ ", token=" + token
|
||||
+ ", isWriteHeader=" + isWriteHeader
|
||||
|
@ -528,8 +528,8 @@ public class StpLogic {
|
||||
// 3、只有在配置了 [ 允许一个账号多地同时登录 ] 时,才尝试复用旧 token,这样可以避免不必要地查询,节省开销
|
||||
if(loginParameter.getIsConcurrent()) {
|
||||
|
||||
// 3.1、看看全局配置的 IsShare 参数,配置为 true 才是允许复用旧 token
|
||||
if(getConfigOfIsShare()) {
|
||||
// 3.1、如果配置了允许复用旧 token
|
||||
if(isSupportShareToken() && loginParameter.getIsShare()) {
|
||||
|
||||
// 根据 账号id + 设备类型,尝试获取旧的 token
|
||||
String tokenValue = getTokenValueByLoginId(id, loginParameter.getDevice());
|
||||
@ -2829,11 +2829,11 @@ public class StpLogic {
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回全局配置对象的 isShare 属性
|
||||
* 返回当前 StpLogic 是否支持共享 token 策略
|
||||
*
|
||||
* @return /
|
||||
* @return /
|
||||
*/
|
||||
public boolean getConfigOfIsShare() {
|
||||
public boolean isSupportShareToken() {
|
||||
return getConfigOrGlobal().getIsShare();
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,10 @@ public class TestController {
|
||||
// 测试登录 ---- http://localhost:8081/test/login
|
||||
@RequestMapping("login")
|
||||
public SaResult login(@RequestParam(defaultValue = "10001") long id) {
|
||||
StpUtil.login(id, new SaLoginParameter().setIsConcurrent(true));
|
||||
StpUtil.login(id, new SaLoginParameter()
|
||||
.setIsConcurrent(true)
|
||||
.setIsShare(false)
|
||||
);
|
||||
return SaResult.ok("登录成功");
|
||||
}
|
||||
|
||||
|
@ -265,7 +265,7 @@ public class StpLogicJwtForMixin extends StpLogic {
|
||||
* @return /
|
||||
*/
|
||||
@Override
|
||||
public boolean getConfigOfIsShare() {
|
||||
public boolean isSupportShareToken() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -83,7 +83,7 @@ public class StpLogicJwtForSimple extends StpLogic {
|
||||
|
||||
|
||||
@Override
|
||||
public boolean getConfigOfIsShare() {
|
||||
public boolean isSupportShareToken() {
|
||||
// 为确保 jwt-simple 模式的 token Extra 数据生成不受旧token影响,这里必须让 is-share 恒为 false
|
||||
// 即:在使用 jwt-simple 模式后,即使配置了 is-share=true 也不能复用旧 Token,必须每次创建新 Token
|
||||
return false;
|
||||
|
Loading…
Reference in New Issue
Block a user