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

添加token专有session

上级 20f6bd7b
...@@ -28,6 +28,13 @@ public class SaTokenInfo { ...@@ -28,6 +28,13 @@ public class SaTokenInfo {
/** session剩余有效时间 (单位: 秒) */ /** session剩余有效时间 (单位: 秒) */
public long sessionTimeout; public long sessionTimeout;
/** token专属session剩余有效时间 (单位: 秒) */
public long tokenSessionTimeout;
/** /**
* token剩余无操作有效时间 * token剩余无操作有效时间
*/ */
...@@ -146,6 +153,21 @@ public class SaTokenInfo { ...@@ -146,6 +153,21 @@ public class SaTokenInfo {
return this; return this;
} }
/**
* @return tokenSessionTimeout
*/
public long getTokenSessionTimeout() {
return tokenSessionTimeout;
}
/**
* @param tokenSessionTimeout 要设置的 tokenSessionTimeout
*/
public SaTokenInfo setTokenSessionTimeout(long tokenSessionTimeout) {
this.tokenSessionTimeout = tokenSessionTimeout;
return this;
}
/** /**
* @return tokenActivityTimeout * @return tokenActivityTimeout
*/ */
...@@ -169,8 +191,11 @@ public class SaTokenInfo { ...@@ -169,8 +191,11 @@ public class SaTokenInfo {
public String toString() { public String toString() {
return "SaTokenInfo [tokenName=" + tokenName + ", tokenValue=" + tokenValue + ", isLogin=" + isLogin return "SaTokenInfo [tokenName=" + tokenName + ", tokenValue=" + tokenValue + ", isLogin=" + isLogin
+ ", loginId=" + loginId + ", loginKey=" + loginKey + ", tokenTimeout=" + tokenTimeout + ", loginId=" + loginId + ", loginKey=" + loginKey + ", tokenTimeout=" + tokenTimeout
+ ", sessionTimeout=" + sessionTimeout + ", tokenActivityTimeout=" + tokenActivityTimeout + "]"; + ", sessionTimeout=" + sessionTimeout + ", tokenSessionTimeout=" + tokenSessionTimeout
+ ", tokenActivityTimeout=" + tokenActivityTimeout + "]";
} }
......
...@@ -119,6 +119,7 @@ public class StpLogic { ...@@ -119,6 +119,7 @@ public class StpLogic {
info.loginKey = getLoginKey(); info.loginKey = getLoginKey();
info.tokenTimeout = getTokenTimeout(); info.tokenTimeout = getTokenTimeout();
info.sessionTimeout = getSessionTimeout(); info.sessionTimeout = getSessionTimeout();
info.tokenSessionTimeout = getTokenSessionTimeout();
info.tokenActivityTimeout = getTokenActivityTimeout(); info.tokenActivityTimeout = getTokenActivityTimeout();
return info; return info;
} }
...@@ -382,7 +383,7 @@ public class StpLogic { ...@@ -382,7 +383,7 @@ public class StpLogic {
* @param isCreate 是否新建 * @param isCreate 是否新建
* @return session对象 * @return session对象
*/ */
protected SaSession getSessionBySessionId(String sessionId, boolean isCreate) { public SaSession getSessionBySessionId(String sessionId, boolean isCreate) {
SaSession session = SaTokenManager.getSaTokenDao().getSession(sessionId); SaSession session = SaTokenManager.getSaTokenDao().getSession(sessionId);
if(session == null && isCreate) { if(session == null && isCreate) {
session = new SaSession(sessionId); session = new SaSession(sessionId);
...@@ -427,6 +428,27 @@ public class StpLogic { ...@@ -427,6 +428,27 @@ public class StpLogic {
return getSession(true); 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 { ...@@ -555,6 +577,24 @@ public class StpLogic {
return SaTokenManager.getSaTokenDao().getSessionTimeout(getKeySession(loginId)); 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[临时过期]剩余有效时间 (单位: 秒) * 获取当前token[临时过期]剩余有效时间 (单位: 秒)
* @return token[临时过期]剩余有效时间 * @return token[临时过期]剩余有效时间
...@@ -596,6 +636,7 @@ public class StpLogic { ...@@ -596,6 +636,7 @@ public class StpLogic {
return timeout; return timeout;
} }
// =================== 权限验证操作 =================== // =================== 权限验证操作 ===================
...@@ -694,6 +735,14 @@ public class StpLogic { ...@@ -694,6 +735,14 @@ public class StpLogic {
public String getKeySession(Object loginId) { public String getKeySession(Object loginId) {
return SaTokenManager.getConfig().getTokenName() + ":" + loginKey + ":session:" + 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的最后操作时间 持久化 * 获取key: 指定token的最后操作时间 持久化
* @param tokenValue token值 * @param tokenValue token值
......
...@@ -207,6 +207,26 @@ public class StpUtil { ...@@ -207,6 +207,26 @@ public class StpUtil {
return stpLogic.getSession(); 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 @@ ...@@ -33,11 +33,11 @@
</dependency> </dependency>
<!-- sa-token 整合 redis --> <!-- sa-token 整合 redis -->
<!-- <dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis</artifactId> <artifactId>sa-token-dao-redis</artifactId>
<version>1.7.0</version> <version>1.7.0</version>
</dependency> --> </dependency>
<!-- @ConfigurationProperties --> <!-- @ConfigurationProperties -->
<dependency> <dependency>
......
...@@ -95,6 +95,22 @@ public class TestController { ...@@ -95,6 +95,22 @@ public class TestController {
return AjaxJson.getSuccess(); 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 // 打印当前token信息, 浏览器访问: http://localhost:8081/test/tokenInfo
@RequestMapping("tokenInfo") @RequestMapping("tokenInfo")
public AjaxJson tokenInfo() { public AjaxJson tokenInfo() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册