mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-09-19 10:08:07 +08:00
在无token时自动创建会话,完美兼容token-session
会话模型!
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package cn.dev33.satoken.stp;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@@ -428,7 +429,18 @@ public class StpLogic {
|
||||
return getSession(true);
|
||||
}
|
||||
|
||||
// ---------- token专属session
|
||||
|
||||
// =================== token专属session ===================
|
||||
|
||||
/**
|
||||
* 获取指定token的专属session,如果session尚未创建,isCreate代表是否新建并返回
|
||||
* @param tokenValue token值
|
||||
* @param isCreate 是否新建
|
||||
* @return session会话
|
||||
*/
|
||||
public SaSession getTokenSessionByToken(String tokenValue, boolean isCreate) {
|
||||
return getSessionBySessionId(getKeyTokenSession(tokenValue), isCreate);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定token的专属session,如果session尚未创建,则新建并返回
|
||||
@@ -439,16 +451,34 @@ public class StpLogic {
|
||||
return getSessionBySessionId(getKeyTokenSession(tokenValue), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前token的专属-session,如果session尚未创建,isCreate代表是否新建并返回
|
||||
* <p> 只有当前会话属于登录状态才可调用
|
||||
* @param isCreate 是否新建
|
||||
* @return session会话
|
||||
*/
|
||||
public SaSession getTokenSession(boolean isCreate) {
|
||||
// 如果配置了需要校验登录状态,则验证一下
|
||||
if(getConfig().getTokenSessionCheckLogin()) {
|
||||
checkLogin();
|
||||
} else {
|
||||
// 如果配置忽略token登录校验,则必须保证token不为null (token为null的时候随机创建一个)
|
||||
String tokenValue = getTokenValue();
|
||||
if(tokenValue == null || Objects.equals(tokenValue, "")) {
|
||||
setLoginId(SaTokenInsideUtil.getMarking28());
|
||||
}
|
||||
}
|
||||
// 返回这个token对应的专属session
|
||||
return getSessionBySessionId(getKeyTokenSession(getTokenValue()), isCreate);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前token的专属-session,如果session尚未创建,则新建并返回
|
||||
* <p> 只有当前会话属于登录状态才可调用
|
||||
* @return session会话
|
||||
*/
|
||||
public SaSession getTokenSession() {
|
||||
if(getConfig().getTokenSessionCheckLogin()) {
|
||||
checkLogin();
|
||||
}
|
||||
return getTokenSessionByToken(getTokenValue());
|
||||
return getTokenSession(true);
|
||||
}
|
||||
|
||||
|
||||
@@ -758,7 +788,7 @@ public class StpLogic {
|
||||
* 返回配置对象
|
||||
*/
|
||||
public SaTokenConfig getConfig() {
|
||||
// 为什么再代理一层? 为某些极端业务场景下[需要不同StpLogic不同配置]提供便利
|
||||
// 为什么再次代理一层? 为某些极端业务场景下[需要不同StpLogic不同配置]提供便利
|
||||
return SaTokenManager.getConfig();
|
||||
}
|
||||
|
||||
|
@@ -207,7 +207,8 @@ public class StpUtil {
|
||||
return stpLogic.getSession();
|
||||
}
|
||||
|
||||
// ---------- token专属session
|
||||
|
||||
// =================== token专属session ===================
|
||||
|
||||
/**
|
||||
* 获取指定token的专属session,如果session尚未创建,则新建并返回
|
||||
|
@@ -59,5 +59,12 @@ public class SaTokenInsideUtil {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 以当前时间戳和随机int数字拼接一个随机字符串
|
||||
*/
|
||||
public static String getMarking28() {
|
||||
return System.currentTimeMillis() + "" + new Random().nextInt(Integer.MAX_VALUE);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@@ -23,6 +23,7 @@ spring:
|
||||
token-style: uuid
|
||||
# 是否在初始化配置时打印版本字符画
|
||||
is-v: true
|
||||
tokenSessionCheckLogin: false
|
||||
|
||||
|
||||
# redis配置
|
||||
|
Reference in New Issue
Block a user