提交 a59ee940 编写于 作者: shengzhang_'s avatar shengzhang_

添加token专有session

上级 20f6bd7b
......@@ -28,6 +28,13 @@ public class SaTokenInfo {
/** session剩余有效时间 (单位: 秒) */
public long sessionTimeout;
/** token专属session剩余有效时间 (单位: 秒) */
public long tokenSessionTimeout;
/**
* token剩余无操作有效时间
*/
......@@ -146,6 +153,21 @@ public class SaTokenInfo {
return this;
}
/**
* @return tokenSessionTimeout
*/
public long getTokenSessionTimeout() {
return tokenSessionTimeout;
}
/**
* @param tokenSessionTimeout 要设置的 tokenSessionTimeout
*/
public SaTokenInfo setTokenSessionTimeout(long tokenSessionTimeout) {
this.tokenSessionTimeout = tokenSessionTimeout;
return this;
}
/**
* @return tokenActivityTimeout
*/
......@@ -169,8 +191,11 @@ public class SaTokenInfo {
public String toString() {
return "SaTokenInfo [tokenName=" + tokenName + ", tokenValue=" + tokenValue + ", isLogin=" + isLogin
+ ", loginId=" + loginId + ", loginKey=" + loginKey + ", tokenTimeout=" + tokenTimeout
+ ", sessionTimeout=" + sessionTimeout + ", tokenActivityTimeout=" + tokenActivityTimeout + "]";
+ ", sessionTimeout=" + sessionTimeout + ", tokenSessionTimeout=" + tokenSessionTimeout
+ ", tokenActivityTimeout=" + tokenActivityTimeout + "]";
}
......
......@@ -119,6 +119,7 @@ public class StpLogic {
info.loginKey = getLoginKey();
info.tokenTimeout = getTokenTimeout();
info.sessionTimeout = getSessionTimeout();
info.tokenSessionTimeout = getTokenSessionTimeout();
info.tokenActivityTimeout = getTokenActivityTimeout();
return info;
}
......@@ -382,7 +383,7 @@ public class StpLogic {
* @param isCreate 是否新建
* @return session对象
*/
protected SaSession getSessionBySessionId(String sessionId, boolean isCreate) {
public SaSession getSessionBySessionId(String sessionId, boolean isCreate) {
SaSession session = SaTokenManager.getSaTokenDao().getSession(sessionId);
if(session == null && isCreate) {
session = new SaSession(sessionId);
......@@ -427,6 +428,27 @@ public class StpLogic {
return getSession(true);
}
// ---------- token专属session
/**
* 获取指定token的专属session,如果session尚未创建,则新建并返回
* @param tokenValue token值
* @return session会话
*/
public SaSession getTokenSessionByToken(String tokenValue) {
return getSessionBySessionId(getKeyTokenSession(tokenValue), true);
}
/**
* 获取当前token的专属-session,如果session尚未创建,则新建并返回
* <p> 只有当前会话属于登录状态才可调用
* @return session会话
*/
public SaSession getTokenSession() {
checkLogin();
return getTokenSessionByToken(getTokenValue());
}
// =================== [临时过期] 验证相关 ===================
......@@ -555,6 +577,24 @@ public class StpLogic {
return SaTokenManager.getSaTokenDao().getSessionTimeout(getKeySession(loginId));
}
/**
* 获取当前token的专属Session剩余有效时间 (单位: 秒)
* @return token剩余有效时间
*/
public long getTokenSessionTimeout() {
return getTokenSessionTimeoutByTokenValue(getTokenValue());
}
/**
* 获取指定token的专属Session剩余有效时间 (单位: 秒)
* @param tokenValue 指定token
* @return token剩余有效时间
*/
public long getTokenSessionTimeoutByTokenValue(String tokenValue) {
return SaTokenManager.getSaTokenDao().getSessionTimeout(getKeyTokenSession(tokenValue));
}
/**
* 获取当前token[临时过期]剩余有效时间 (单位: 秒)
* @return token[临时过期]剩余有效时间
......@@ -596,6 +636,7 @@ public class StpLogic {
return timeout;
}
// =================== 权限验证操作 ===================
......@@ -694,6 +735,14 @@ public class StpLogic {
public String getKeySession(Object loginId) {
return SaTokenManager.getConfig().getTokenName() + ":" + loginKey + ":session:" + loginId;
}
/**
* 获取key: tokenValue的专属session
* @param tokenValue token值
* @return key
*/
public String getKeyTokenSession(String tokenValue) {
return SaTokenManager.getConfig().getTokenName() + ":" + loginKey + ":token-session:" + tokenValue;
}
/**
* 获取key: 指定token的最后操作时间 持久化
* @param tokenValue token值
......
......@@ -207,6 +207,26 @@ public class StpUtil {
return stpLogic.getSession();
}
// ---------- token专属session
/**
* 获取指定token的专属session,如果session尚未创建,则新建并返回
* @param tokenValue token值
* @return session会话
*/
public static SaSession getTokenSessionByToken(String tokenValue) {
return stpLogic.getTokenSessionByToken(tokenValue);
}
/**
* 获取当前token的专属-session,如果session尚未创建,则新建并返回
* <p> 只有当前会话属于登录状态才可调用
* @return session会话
*/
public static SaSession getTokenSession() {
return stpLogic.getTokenSession();
}
// =================== [临时过期] 验证相关 ===================
......
......@@ -33,11 +33,11 @@
</dependency>
<!-- sa-token 整合 redis -->
<!-- <dependency>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis</artifactId>
<version>1.7.0</version>
</dependency> -->
</dependency>
<!-- @ConfigurationProperties -->
<dependency>
......
......@@ -95,6 +95,22 @@ public class TestController {
return AjaxJson.getSuccess();
}
// ----------
// 测试token专属session, 浏览器访问: http://localhost:8081/test/getTokenSession
@RequestMapping("getTokenSession")
public AjaxJson getTokenSession() {
System.out.println("======================= 进入方法,测试会话session接口 ========================= ");
System.out.println("当前是否登录:" + StpUtil.isLogin());
System.out.println("当前token专属session: " + StpUtil.getTokenSession().getId());
System.out.println("测试取值name:" + StpUtil.getTokenSession().getAttribute("name"));
StpUtil.getTokenSession().setAttribute("name", "张三"); // 写入一个值
System.out.println("测试取值name:" + StpUtil.getTokenSession().getAttribute("name"));
return AjaxJson.getSuccess();
}
// 打印当前token信息, 浏览器访问: http://localhost:8081/test/tokenInfo
@RequestMapping("tokenInfo")
public AjaxJson tokenInfo() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册