feat: 为SaTokenListener添加支持,支持侦听Token在默认持久层的失效事件

This commit is contained in:
zxy 2025-05-08 15:32:01 +08:00
parent 2ecd52b3be
commit 6187c1dd1a
5 changed files with 147 additions and 103 deletions

View File

@ -18,6 +18,8 @@ package cn.dev33.satoken.dao.timedcache;
import cn.dev33.satoken.SaManager; import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.dao.SaTokenDao; import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.listener.SaTokenEventCenter;
import cn.dev33.satoken.util.SaFoxUtil;
import java.util.Set; import java.util.Set;
@ -100,6 +102,18 @@ public class SaTimedCache {
if(expirationTime != null && expirationTime != SaTokenDao.NEVER_EXPIRE && expirationTime < System.currentTimeMillis()) { if(expirationTime != null && expirationTime != SaTokenDao.NEVER_EXPIRE && expirationTime < System.currentTimeMillis()) {
dataMap.remove(key); dataMap.remove(key);
expireMap.remove(key); expireMap.remove(key);
// 如果这个 key token 才处理
String tokenSegment = "token:";
if (SaFoxUtil.isNotEmpty(key)) {
int index = key.indexOf(tokenSegment);
if (index != -1) {
// 截取 token 部分
String token = key.substring(index + tokenSegment.length());
// $$ 发布事件token 失效
SaTokenEventCenter.doTokenExpire(token);
}
}
} }
} }

View File

@ -277,6 +277,17 @@ public class SaTokenEventCenter {
} }
} }
/**
* 事件发布 Token 失效仅支持默认持久层
*
* @param tokenValue token
*/
public static void doTokenExpire(String tokenValue) {
for (SaTokenListener listener : listenerList) {
listener.doTokenExpire(tokenValue);
}
}
/** /**
* 事件发布有新的全局组件载入到框架中 * 事件发布有新的全局组件载入到框架中
* @param compName 组件名称 * @param compName 组件名称

View File

@ -119,6 +119,13 @@ public interface SaTokenListener {
*/ */
void doRenewTimeout(String tokenValue, Object loginId, long timeout); void doRenewTimeout(String tokenValue, Object loginId, long timeout);
/**
* 每次 Token 失效时触发仅支持默认持久层
*
* @param tokenValue token
*/
void doTokenExpire(String tokenValue);
/** /**
* 全局组件载入 * 全局组件载入
* @param compName 组件名称 * @param compName 组件名称

View File

@ -119,6 +119,14 @@ public class SaTokenListenerForLog implements SaTokenListener {
log.info("token 续期成功, {} 秒后到期, 帐号={}, token值={} ", timeout, loginId, tokenValue); log.info("token 续期成功, {} 秒后到期, 帐号={}, token值={} ", timeout, loginId, tokenValue);
} }
/**
* 每次 Token 失效时触发仅支持默认持久层
*/
@Override
public void doTokenExpire(String tokenValue) {
log.info("token 失效, token值={} ", tokenValue);
}
/** /**
* 全局组件载入 * 全局组件载入

View File

@ -82,5 +82,9 @@ public class SaTokenListenerForSimple implements SaTokenListener {
} }
@Override
public void doTokenExpire(String tokenValue) {
}
} }