From e3465870ee8c48e7105e6a4d8451b26091fcc2ae Mon Sep 17 00:00:00 2001 From: fanpeng Date: Sat, 20 Aug 2022 21:26:57 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=96=B0=E5=A2=9Etoken=E8=B6=85=E6=97=B6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=8B=E4=BB=B6=E7=9B=91=E5=90=AC=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dev33/satoken/listener/SaTokenEventCenter.java | 14 +++++++++++++- .../cn/dev33/satoken/listener/SaTokenListener.java | 10 +++++++++- .../listener/SaTokenListenerForConsolePrint.java | 12 ++++++++++++ .../satoken/listener/SaTokenListenerForSimple.java | 5 +++++ .../main/java/cn/dev33/satoken/stp/StpLogic.java | 3 +++ 5 files changed, 42 insertions(+), 2 deletions(-) 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); } // ------------------- 角色验证操作 ------------------- From b2a925811c62c40f4b1dae27ba05e9a3add720af Mon Sep 17 00:00:00 2001 From: fanpeng Date: Sat, 20 Aug 2022 21:37:21 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=96=B0=E5=A2=9Etoken=E8=B6=85=E6=97=B6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=8B=E4=BB=B6=E7=9B=91=E5=90=AC=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sa-token-doc/doc/up/global-listener.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 + "]更新超时时间成功!"); + } } ``` From 0cd877c6e61a479100e2e584acfabdf41e307454 Mon Sep 17 00:00:00 2001 From: fanpeng Date: Sun, 21 Aug 2022 10:15:45 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=B3=A8=E8=A7=A3?= =?UTF-8?q?=E6=8B=A6=E6=88=AA=E5=99=A8=E4=B8=8D=E7=94=9F=E6=95=88=E7=9A=84?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sa-token-doc/doc/more/common-questions.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/sa-token-doc/doc/more/common-questions.md b/sa-token-doc/doc/more/common-questions.md index 7954cd42..9874d412 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`时, 也会导致拦截器失效. + + **常见场景**: swagger相关静态资源开放, 很多教程会在`WebMvcConfigurationSupport`中设置`addResourceHandlers`方法以开放静态资源映射, 同时Sa-Token相关配置添加了`WebMvcConfigurer`配置`addInterceptors`方法注册拦截器, 这样就会导致拦截器失效. + + **解决方案**: `WebMvcConfigurer`和`WebMvcConfigurationSupport`只选一个配置, 建议统一通过实现`WebMvcConfigurer`接口进行配置. +4. 如果以上步骤处理后仍然没有效果,加群说明一下复现步骤 ### 有时候我不加 Token 也可以通过鉴权,请问是怎么回事? From 87e26a3e6f6513bd3e5e348589b3e1051f081a0c Mon Sep 17 00:00:00 2001 From: fanpeng Date: Sun, 21 Aug 2022 10:21:15 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=B3=A8=E8=A7=A3?= =?UTF-8?q?=E6=8B=A6=E6=88=AA=E5=99=A8=E4=B8=8D=E7=94=9F=E6=95=88=E7=9A=84?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sa-token-doc/doc/more/common-questions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sa-token-doc/doc/more/common-questions.md b/sa-token-doc/doc/more/common-questions.md index 9874d412..965f6e9d 100644 --- a/sa-token-doc/doc/more/common-questions.md +++ b/sa-token-doc/doc/more/common-questions.md @@ -50,7 +50,7 @@ 1. 注解鉴权功能默认关闭,两种方式任选其一进行打开:注册注解拦截器、集成AOP模块,参考:[注解式鉴权](/use/at-check) 2. 在Spring环境中, 如果同时配置了`WebMvcConfigurer`和`WebMvcConfigurationSupport`时, 也会导致拦截器失效. - **常见场景**: swagger相关静态资源开放, 很多教程会在`WebMvcConfigurationSupport`中设置`addResourceHandlers`方法以开放静态资源映射, 同时Sa-Token相关配置添加了`WebMvcConfigurer`配置`addInterceptors`方法注册拦截器, 这样就会导致拦截器失效. + **常见场景**: 很多项目中会在`WebMvcConfigurationSupport`中配置`addResourceHandlers`方法开放Swagger等相关静态资源映射, 同时基于Sa-Token添加了`WebMvcConfigurer`配置`addInterceptors`方法注册注解拦截器, 这样会导致注解拦截器失效. **解决方案**: `WebMvcConfigurer`和`WebMvcConfigurationSupport`只选一个配置, 建议统一通过实现`WebMvcConfigurer`接口进行配置. 4. 如果以上步骤处理后仍然没有效果,加群说明一下复现步骤