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 cd708942..7a83da71 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 @@ -214,5 +214,17 @@ public class SaTokenEventCenter { listener.doLogoutSession(id); } } - + + /** + * 每次renew timeout时触发 + * + * @param tokenValue + * @param loginId + * @param timeout + */ + public static void doRenewTimeout(String tokenValue, Object loginId, long timeout) { + for (SaTokenListener listener : listenerList) { + listener.doRenewTimeout(tokenValue, loginId, timeout); + } + } } 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 4fdff910..2912241f 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 @@ -69,5 +69,13 @@ public interface SaTokenListener { * @param id SessionId */ public void doLogoutSession(String id); - + + /** + * 执行renew超时时间操作的时触发 + * + * @param tokenValue + * @param loginId + * @param timeout + */ + public void doRenewTimeout(String tokenValue, Object loginId, long timeout); } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListenerForConsolePrint.java b/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListenerForConsolePrint.java index c13229c2..b4940075 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListenerForConsolePrint.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/listener/SaTokenListenerForConsolePrint.java @@ -78,6 +78,18 @@ public class SaTokenListenerForConsolePrint implements SaTokenListener { println("Session[" + id + "]注销成功"); } + /** + * 每次更新超时时间后触发 + * + * @param tokenValue + * @param loginId + * @param timeout + */ + @Override + public void doRenewTimeout(String tokenValue, Object loginId, long timeout) { + println("帐号[" + loginId + "]更新超时时间成功!"); + } + /** * 日志输出的前缀 */ 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 3ad3b7a6..9f999067 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 @@ -52,4 +52,9 @@ public class SaTokenListenerForSimple implements SaTokenListener { } + @Override + public void doRenewTimeout(String tokenValue, Object loginId, long timeout) { + + } + } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java index 985dfa55..9f1377e7 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java @@ -1219,6 +1219,9 @@ public class StpLogic { if(isOpenActivityCheck()) { dao.updateTimeout(splicingKeyLastActivityTime(tokenValue), timeout); } + + // 通知更新超时事件 + SaTokenEventCenter.doRenewTimeout(tokenValue, loginId, timeout); } // ------------------- 角色验证操作 ------------------- diff --git a/sa-token-doc/doc/more/common-questions.md b/sa-token-doc/doc/more/common-questions.md index 7954cd42..965f6e9d 100644 --- a/sa-token-doc/doc/more/common-questions.md +++ b/sa-token-doc/doc/more/common-questions.md @@ -47,8 +47,13 @@ ### 加了注解进行鉴权认证,不生效? -注解鉴权功能默认关闭,两种方式任选其一进行打开:注册注解拦截器、集成AOP模块,参考:[注解式鉴权](/use/at-check), -如果已经打开仍然没有效果,加群说明一下复现步骤 +1. 注解鉴权功能默认关闭,两种方式任选其一进行打开:注册注解拦截器、集成AOP模块,参考:[注解式鉴权](/use/at-check) +2. 在Spring环境中, 如果同时配置了`WebMvcConfigurer`和`WebMvcConfigurationSupport`时, 也会导致拦截器失效. + + **常见场景**: 很多项目中会在`WebMvcConfigurationSupport`中配置`addResourceHandlers`方法开放Swagger等相关静态资源映射, 同时基于Sa-Token添加了`WebMvcConfigurer`配置`addInterceptors`方法注册注解拦截器, 这样会导致注解拦截器失效. + + **解决方案**: `WebMvcConfigurer`和`WebMvcConfigurationSupport`只选一个配置, 建议统一通过实现`WebMvcConfigurer`接口进行配置. +4. 如果以上步骤处理后仍然没有效果,加群说明一下复现步骤 ### 有时候我不加 Token 也可以通过鉴权,请问是怎么回事? diff --git a/sa-token-doc/doc/up/global-listener.md b/sa-token-doc/doc/up/global-listener.md index 1e202cfd..66af3983 100644 --- a/sa-token-doc/doc/up/global-listener.md +++ b/sa-token-doc/doc/up/global-listener.md @@ -78,7 +78,12 @@ public class MySaTokenListener implements SaTokenListener { public void doLogoutSession(String id) { System.out.println("---------- 自定义侦听器实现 doLogoutSession"); } - + + /** 每次更新token超时时间时触发 */ + @Override + public void doRenewTimeout(String tokenValue, Object loginId, long timeout) { + System.out.println("帐号[" + loginId + "]更新超时时间成功!"); + } } ```