v1.7.0新特性,token临时过期时间设定

This commit is contained in:
shengzhang
2020-12-24 18:11:12 +08:00
parent ded6da5554
commit 5c684ac7f1
12 changed files with 624 additions and 116 deletions

View File

@@ -10,8 +10,7 @@ public class SaTokenDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SaTokenDemoApplication.class, args);
System.out.println("启动成功sa-token配置如下" + SaTokenManager.getConfig());
System.out.println("\n启动成功sa-token配置如下" + SaTokenManager.getConfig());
}
}

View File

@@ -7,7 +7,6 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.session.SaSession;
@@ -15,7 +14,7 @@ import cn.dev33.satoken.session.SaSession;
/**
* sa-token持久层的实现类 , 基于redis
*/
@Component // 打开此注解保证此类被springboot扫描即可完成sa-token与redis的集成
//@Component // 打开此注解保证此类被springboot扫描即可完成sa-token与redis的集成
public class SaTokenDaoRedis implements SaTokenDao {
@@ -58,12 +57,13 @@ public class SaTokenDaoRedis implements SaTokenDao {
if(expire == SaTokenDao.NOT_VALUE_EXPIRE) { // -2 = 无此键
return;
}
stringRedisTemplate.opsForValue().set(key, value, expire, TimeUnit.SECONDS);
// stringRedisTemplate.opsForValue().set(key, value, expire, TimeUnit.SECONDS);
this.setValue(key, value, expire);
}
// 删除一个指定的key
@Override
public void delKey(String key) {
public void deleteKey(String key) {
stringRedisTemplate.delete(key);
}
@@ -99,7 +99,8 @@ public class SaTokenDaoRedis implements SaTokenDao {
if(expire == SaTokenDao.NOT_VALUE_EXPIRE) { // -2 = 无此键
return;
}
redisTemplate.opsForValue().set(session.getId(), session, expire, TimeUnit.SECONDS);
// redisTemplate.opsForValue().set(session.getId(), session, expire, TimeUnit.SECONDS);
this.saveSession(session, expire);
}
// 删除一个指定的session
@@ -108,11 +109,7 @@ public class SaTokenDaoRedis implements SaTokenDao {
redisTemplate.delete(sessionId);
}
// 获取指定SaSession的剩余存活时间 (单位: 秒)
@Override
public long getSessionTimeout(String sessionId) {
return redisTemplate.getExpire(sessionId);

View File

@@ -1,29 +1,19 @@
package com.pj.satoken;
import java.util.Map;
import org.springframework.stereotype.Service;
import cn.dev33.satoken.SaTokenManager;
import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpLogic;
/**
* 一个默认的实现
* @author kong
*/
@Service
public class StpUserUtil {
/**
* 底层的 StpLogic 对象
*/
public static StpLogic stpLogic = new StpLogic("user") {
@Override
public String getKeyTokenName() {
return SaTokenManager.getConfig().getTokenName() + "-user";
}
};
public static StpLogic stpLogic = new StpLogic("user");
// =================== 获取token 相关 ===================
@@ -45,19 +35,27 @@ public class StpUserUtil {
}
/**
* 获取指定id的tokenValue
* 获取指定id的tokenValue
* @param loginId .
* @return
*/
public static String getTokenValueByLoginId(Object loginId) {
return stpLogic.getTokenValueByLoginId(loginId);
}
/**
* 获取当前会话的token信息tokenName与tokenValue
* @return 一个Map对象
* 获取当前StpLogin的loginKey
* @return 当前StpLogin的loginKey
*/
public static Map<String, Object> getTokenInfo() {
public static String getLoginKey(){
return stpLogic.getLoginKey();
}
/**
* 获取当前会话的token信息
* @return token信息
*/
public static SaTokenInfo getTokenInfo() {
return stpLogic.getTokenInfo();
}
@@ -79,13 +77,21 @@ public class StpUserUtil {
}
/**
* 指定loginId的会话注销登录踢人下线)
* 指定loginId的会话注销登录清退下线)
* @param loginId 账号id
*/
public static void logoutByLoginId(Object loginId) {
stpLogic.logoutByLoginId(loginId);
}
/**
* 指定loginId的会话注销登录踢人下线
* @param loginId 账号id
*/
public static void kickoutByLoginId(Object loginId) {
stpLogic.kickoutByLoginId(loginId);
}
// 查询相关
/**
@@ -160,6 +166,7 @@ public class StpUserUtil {
return stpLogic.getLoginIdByToken(tokenValue);
}
// =================== session相关 ===================
/**
@@ -189,6 +196,46 @@ public class StpUserUtil {
return stpLogic.getSession();
}
// =================== 过期时间相关 ===================
/**
* 获取当前登录者的token剩余有效时间 (单位: 秒)
* @return token剩余有效时间
*/
public long getTimeout() {
return stpLogic.getTokenTimeout();
}
/**
* 获取指定loginId的token剩余有效时间 (单位: 秒)
* @param loginId 指定loginId
* @return token剩余有效时间
*/
public long getTimeoutByLoginId(Object loginId) {
return stpLogic.getTokenTimeoutByLoginId(loginId);
}
/**
* 获取当前登录者的Session剩余有效时间 (单位: 秒)
* @return token剩余有效时间
*/
public long getSessionTimeout() {
return stpLogic.getSessionTimeout();
}
/**
* 获取指定loginId的Session剩余有效时间 (单位: 秒)
* @param loginId 指定loginId
* @return token剩余有效时间
*/
public long getSessionTimeoutByLoginId(Object loginId) {
return stpLogic.getSessionTimeoutByLoginId(loginId);
}
// =================== 权限验证操作 ===================
/**

View File

@@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.RestController;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.session.SaSessionCustomUtil;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
/**
@@ -19,15 +20,6 @@ import cn.dev33.satoken.stp.StpUtil;
public class TestController {
// 当前是否登录 浏览器访问: http://localhost:8081/test/isLogin
@RequestMapping("isLogin")
public AjaxJson isLogin() {
System.out.println("当前是否登录:" + StpUtil.isLogin());
System.out.println("当前登录账号id" + StpUtil.getLoginId(-1));
return AjaxJson.getSuccessData(StpUtil.getTokenInfo());
}
// 测试登录接口, 浏览器访问: http://localhost:8081/test/login
@RequestMapping("login")
public AjaxJson login(@RequestParam(defaultValue="10001") String id) {
@@ -107,8 +99,9 @@ public class TestController {
@RequestMapping("tokenInfo")
public AjaxJson tokenInfo() {
System.out.println("======================= 进入方法打印当前token信息 ========================= ");
System.out.println(StpUtil.getTokenInfo());
return AjaxJson.getSuccess();
SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
System.out.println(tokenInfo);
return AjaxJson.getSuccessData(tokenInfo);
}
@@ -122,15 +115,22 @@ public class TestController {
return AjaxJson.getSuccess();
}
// 测试注解式鉴权, 浏览器访问: http://localhost:8081/test/getInfo
// 测试注解式鉴权, 浏览器访问: http://localhost:8081/test/atLogin
@SaCheckLogin // 注解式鉴权:当前会话必须登录才能通过
@RequestMapping("getInfo")
public AjaxJson getInfo() {
@RequestMapping("atLogin")
public AjaxJson atLogin() {
return AjaxJson.getSuccessData("用户信息");
}
// [活动时间] 续签: http://localhost:8081/test/rene
@RequestMapping("rene")
public AjaxJson rene() {
StpUtil.checkActivityTimeout();
StpUtil.updateLastActivityToNow();
return AjaxJson.getSuccess("续签成功");
}
// 测试踢人下线 浏览器访问: http://localhost:8081/test/kickOut
@RequestMapping("kickOut")