From 64abd69715f90eab7dd3e0dc37f68ca941f7005d Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Fri, 3 May 2024 16:14:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20autoRenewTimeout=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=A1=B9=EF=BC=9A=E6=98=AF=E5=90=A6=E5=9C=A8?= =?UTF-8?q?=E6=AF=8F=E6=AC=A1=E4=B8=8B=E5=8F=91=20ticket=20=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E8=87=AA=E5=8A=A8=E7=BB=AD=E6=9C=9F=20token=20?= =?UTF-8?q?=E7=9A=84=E6=9C=89=E6=95=88=E6=9C=9F=EF=BC=88=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E5=85=A8=E5=B1=80=20timeout=20=E5=80=BC=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../satoken/sso/config/SaSsoServerConfig.java | 22 +++++++++++++++++++ .../sso/processor/SaSsoClientProcessor.java | 2 +- .../sso/processor/SaSsoServerProcessor.java | 5 +++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/config/SaSsoServerConfig.java b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/config/SaSsoServerConfig.java index 2ba6a8a3..1830962f 100644 --- a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/config/SaSsoServerConfig.java +++ b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/config/SaSsoServerConfig.java @@ -69,6 +69,11 @@ public class SaSsoServerConfig implements Serializable { */ public Boolean isHttp = false; + /** + * 是否在每次下发 ticket 时,自动续期 token 的有效期(根据全局 timeout 值) + */ + public Boolean autoRenewTimeout = false; + /** * 在 Access-Session 上记录 Client 信息的最高数量(-1=无限),超过此值将进行自动清退处理,先进先出 */ @@ -180,6 +185,22 @@ public class SaSsoServerConfig implements Serializable { return this; } + /** + * @return 是否在每次下发 ticket 时,自动续期 token 的有效期(根据全局 timeout 值) + */ + public Boolean getAutoRenewTimeout() { + return autoRenewTimeout; + } + + /** + * @param autoRenewTimeout 是否在每次下发 ticket 时,自动续期 token 的有效期(根据全局 timeout 值) + * @return 对象自身 + */ + public SaSsoServerConfig setAutoRenewTimeout(Boolean autoRenewTimeout) { + this.autoRenewTimeout = autoRenewTimeout; + return this; + } + /** * @return maxLoginClient 在 Access-Session 上记录 Client 信息的最高数量(-1=无限),超过此值将进行自动清退处理,先进先出 */ @@ -234,6 +255,7 @@ public class SaSsoServerConfig implements Serializable { + ", homeRoute=" + homeRoute + ", isSlo=" + isSlo + ", isHttp=" + isHttp + + ", autoRenewTimeout=" + autoRenewTimeout + ", maxRegClient=" + maxRegClient + ", isCheckSign=" + isCheckSign + "]"; diff --git a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/processor/SaSsoClientProcessor.java b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/processor/SaSsoClientProcessor.java index 9e589c81..9c8dc651 100644 --- a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/processor/SaSsoClientProcessor.java +++ b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/processor/SaSsoClientProcessor.java @@ -285,7 +285,7 @@ public class SaSsoClientProcessor { // 取出 Session 剩余有效期 Long remainSessionTimeout = result.get(paramName.remainSessionTimeout, Long.class); if(remainSessionTimeout == null) { - remainSessionTimeout = ssoClientTemplate.getStpLogic().getConfig().getTimeout(); + remainSessionTimeout = ssoClientTemplate.getStpLogic().getConfigOrGlobal().getTimeout(); } // 构建返回 return new CheckTicketResult(loginId, remainSessionTimeout); diff --git a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/processor/SaSsoServerProcessor.java b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/processor/SaSsoServerProcessor.java index 3a917376..ec9e00c2 100644 --- a/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/processor/SaSsoServerProcessor.java +++ b/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/processor/SaSsoServerProcessor.java @@ -139,6 +139,11 @@ public class SaSsoServerProcessor { // 构建并跳转 String redirectUrl = ssoServerTemplate.buildRedirectUrl(stpLogic.getLoginId(), client, redirect); + // 构建成功,说明 redirect 地址合法,此时需要更新一下该账号的Session有效期 + if(cfg.getAutoRenewTimeout()) { + stpLogic.renewTimeout(stpLogic.getConfigOrGlobal().getTimeout()); + } + // 跳转 return res.redirect(redirectUrl); } }