mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-09-19 18:22:15 +08:00
在无token时自动创建会话,完美兼容token-session
会话模型!
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package cn.dev33.satoken.stp;
|
package cn.dev33.satoken.stp;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import javax.servlet.http.Cookie;
|
import javax.servlet.http.Cookie;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
@@ -428,7 +429,18 @@ public class StpLogic {
|
|||||||
return getSession(true);
|
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尚未创建,则新建并返回
|
* 获取指定token的专属session,如果session尚未创建,则新建并返回
|
||||||
@@ -439,16 +451,34 @@ public class StpLogic {
|
|||||||
return getSessionBySessionId(getKeyTokenSession(tokenValue), true);
|
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尚未创建,则新建并返回
|
* 获取当前token的专属-session,如果session尚未创建,则新建并返回
|
||||||
* <p> 只有当前会话属于登录状态才可调用
|
* <p> 只有当前会话属于登录状态才可调用
|
||||||
* @return session会话
|
* @return session会话
|
||||||
*/
|
*/
|
||||||
public SaSession getTokenSession() {
|
public SaSession getTokenSession() {
|
||||||
if(getConfig().getTokenSessionCheckLogin()) {
|
return getTokenSession(true);
|
||||||
checkLogin();
|
|
||||||
}
|
|
||||||
return getTokenSessionByToken(getTokenValue());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -758,7 +788,7 @@ public class StpLogic {
|
|||||||
* 返回配置对象
|
* 返回配置对象
|
||||||
*/
|
*/
|
||||||
public SaTokenConfig getConfig() {
|
public SaTokenConfig getConfig() {
|
||||||
// 为什么再代理一层? 为某些极端业务场景下[需要不同StpLogic不同配置]提供便利
|
// 为什么再次代理一层? 为某些极端业务场景下[需要不同StpLogic不同配置]提供便利
|
||||||
return SaTokenManager.getConfig();
|
return SaTokenManager.getConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -207,7 +207,8 @@ public class StpUtil {
|
|||||||
return stpLogic.getSession();
|
return stpLogic.getSession();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------- token专属session
|
|
||||||
|
// =================== token专属session ===================
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取指定token的专属session,如果session尚未创建,则新建并返回
|
* 获取指定token的专属session,如果session尚未创建,则新建并返回
|
||||||
|
@@ -59,5 +59,12 @@ public class SaTokenInsideUtil {
|
|||||||
return sb.toString();
|
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
|
token-style: uuid
|
||||||
# 是否在初始化配置时打印版本字符画
|
# 是否在初始化配置时打印版本字符画
|
||||||
is-v: true
|
is-v: true
|
||||||
|
tokenSessionCheckLogin: false
|
||||||
|
|
||||||
|
|
||||||
# redis配置
|
# redis配置
|
||||||
|
Reference in New Issue
Block a user