From babcd16e24ce246acb4a28ad844cab12170d59af Mon Sep 17 00:00:00 2001 From: zxy <497947426@qq.com> Date: Thu, 8 May 2025 16:51:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BASaTokenListener=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=94=AF=E6=8C=81=EF=BC=8C=E6=94=AF=E6=8C=81=E4=BE=A6?= =?UTF-8?q?=E5=90=ACToken=E5=9C=A8=E9=BB=98=E8=AE=A4=E6=8C=81=E4=B9=85?= =?UTF-8?q?=E5=B1=82=E7=9A=84=E5=A4=B1=E6=95=88=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dev33/satoken/dao/timedcache/SaTimedCache.java | 14 ++++++++++++++ .../dev33/satoken/listener/SaTokenEventCenter.java | 11 +++++++++++ .../cn/dev33/satoken/listener/SaTokenListener.java | 7 +++++++ .../satoken/listener/SaTokenListenerForLog.java | 8 ++++++++ .../satoken/listener/SaTokenListenerForSimple.java | 6 +++++- 5 files changed, 45 insertions(+), 1 deletion(-) diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/dao/timedcache/SaTimedCache.java b/sa-token-core/src/main/java/cn/dev33/satoken/dao/timedcache/SaTimedCache.java index 566f7baa..4bca90a9 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/dao/timedcache/SaTimedCache.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/dao/timedcache/SaTimedCache.java @@ -18,6 +18,8 @@ package cn.dev33.satoken.dao.timedcache; import cn.dev33.satoken.SaManager; import cn.dev33.satoken.dao.SaTokenDao; +import cn.dev33.satoken.listener.SaTokenEventCenter; +import cn.dev33.satoken.util.SaFoxUtil; import java.util.Set; @@ -100,6 +102,18 @@ public class SaTimedCache { if(expirationTime != null && expirationTime != SaTokenDao.NEVER_EXPIRE && expirationTime < System.currentTimeMillis()) { dataMap.remove(key); expireMap.remove(key); + + // 如果这个 key 是 token 才处理 + String tokenSegment = "token:"; + if (SaFoxUtil.isNotEmpty(key)) { + int index = key.lastIndexOf(tokenSegment); + if (index != -1) { + // 截取 token 部分 + String token = key.substring(index + tokenSegment.length()); + // $$ 发布事件:token 失效 + SaTokenEventCenter.doTokenExpire(token); + } + } } } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenEventCenter.java b/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenEventCenter.java index 68228dba..85040729 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenEventCenter.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenEventCenter.java @@ -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 组件名称 diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListener.java b/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListener.java index ed0ca42a..d11c1bfb 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListener.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListener.java @@ -119,6 +119,13 @@ public interface SaTokenListener { */ void doRenewTimeout(String tokenValue, Object loginId, long timeout); + /** + * 每次 Token 失效时触发(仅支持默认持久层) + * + * @param tokenValue token 值 + */ + void doTokenExpire(String tokenValue); + /** * 全局组件载入 * @param compName 组件名称 diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListenerForLog.java b/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListenerForLog.java index cb770e83..71e07b90 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListenerForLog.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListenerForLog.java @@ -119,6 +119,14 @@ public class SaTokenListenerForLog implements SaTokenListener { log.info("token 续期成功, {} 秒后到期, 帐号={}, token值={} ", timeout, loginId, tokenValue); } + /** + * 每次 Token 失效时触发(仅支持默认持久层) + */ + @Override + public void doTokenExpire(String tokenValue) { + log.info("token 失效, token值={} ", tokenValue); + } + /** * 全局组件载入 diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListenerForSimple.java b/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListenerForSimple.java index f7e30f5c..ae60e91e 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListenerForSimple.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListenerForSimple.java @@ -82,5 +82,9 @@ public class SaTokenListenerForSimple implements SaTokenListener { } - + @Override + public void doTokenExpire(String tokenValue) { + } + + }