Session新增timeout操作API

This commit is contained in:
shengzhang 2021-03-21 23:06:06 +08:00
parent 50ffda7bef
commit 55b9c87d6a
2 changed files with 34 additions and 8 deletions

View File

@ -1,7 +1,5 @@
package cn.dev33.satoken.session;
import cn.dev33.satoken.SaTokenManager;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
@ -9,6 +7,8 @@ import java.util.Set;
import java.util.Vector;
import java.util.concurrent.ConcurrentHashMap;
import cn.dev33.satoken.SaTokenManager;
/**
* Session Model
*
@ -258,6 +258,33 @@ public class SaSession implements Serializable {
}
}
/**
* 获取此Session的剩余存活时间 (单位: )
* @return 此Session的剩余存活时间 (单位: )
*/
public long getTimeout() {
return SaTokenManager.getSaTokenDao().getSessionTimeout(this.id);
}
/**
* 修改此Session的剩余存活时间
* @param timeout 过期时间 (单位: )
*/
public void updateTimeout(long timeout) {
SaTokenManager.getSaTokenDao().updateSessionTimeout(this.id, timeout);
}
/**
* 修改此Session的最小剩余存活时间 (只有在Session的过期时间低于指定的minTimeout时才会进行修改)
* @param minTimeout 过期时间 (单位: )
*/
public void updateMinTimeout(long minTimeout) {
if(getTimeout() < minTimeout) {
SaTokenManager.getSaTokenDao().updateSessionTimeout(this.id, minTimeout);
}
}
// ----------------------- 存取值 (类型转换)

View File

@ -244,19 +244,18 @@ public class StpLogic {
if(session == null) {
session = getSessionByLoginId(loginId);
} else {
// 保证此Session的有效期 >= token的有效期
if(dao.getSessionTimeout(session.getId()) < loginModel.getTimeout()) {
dao.updateSessionTimeout(session.getId(), loginModel.getTimeout());
}
session.updateMinTimeout(loginModel.getTimeout());
}
// 在session上记录token签名
session.addTokenSign(new TokenSign(tokenValue, loginModel.getDevice()));
// ------ 4. 持久化其它数据
// token -> uid
dao.set(splicingKeyTokenValue(tokenValue), String.valueOf(loginId), loginModel.getTimeout());
dao.set(splicingKeyTokenValue(tokenValue), String.valueOf(loginId), loginModel.getTimeout());
// 写入 [最后操作时间]
setLastActivityToNow(tokenValue);
setLastActivityToNow(tokenValue);
// 在当前会话写入当前tokenValue
setTokenValue(tokenValue, loginModel.getCookieTimeout());
}