From d3b337a6a6d0e0bb66ab277c5d42d8a29160753c Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Sat, 24 Aug 2024 18:55:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20revokeClientToken=E3=80=81?= =?UTF-8?q?revokeClientTokenByIndex=EF=BC=9A=20Client-Token=20=E5=9B=9E?= =?UTF-8?q?=E6=94=B6=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dev33/satoken/oauth2/dao/SaOAuth2Dao.java | 9 ++++ .../oauth2/template/SaOAuth2Template.java | 41 +++++++++++++++++++ .../satoken/oauth2/template/SaOAuth2Util.java | 21 +++++++++- 3 files changed, 69 insertions(+), 2 deletions(-) diff --git a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/dao/SaOAuth2Dao.java b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/dao/SaOAuth2Dao.java index 801e22cf..136612e8 100644 --- a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/dao/SaOAuth2Dao.java +++ b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/dao/SaOAuth2Dao.java @@ -236,6 +236,15 @@ public interface SaOAuth2Dao { getSaTokenDao().delete(splicingClientTokenIndexKey(clientId)); } + /** + * 删除:Past-Token + * @param pastToken 值 + */ + default void deletePastToken(String pastToken) { + // 其实就是删除 ClientToken + deleteClientToken(pastToken); + } + /** * 删除:Past-Token索引 * @param clientId 应用id diff --git a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/template/SaOAuth2Template.java b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/template/SaOAuth2Template.java index ea5d33ca..f9862b61 100644 --- a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/template/SaOAuth2Template.java +++ b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/template/SaOAuth2Template.java @@ -374,6 +374,47 @@ public class SaOAuth2Template { } + /** + * 回收指定的 ClientToken + * + * @param clientToken / + */ + public void revokeClientToken(String clientToken) { + SaOAuth2Dao dao = SaOAuth2Manager.getDao(); + ClientTokenModel ctModel = dao.getClientToken(clientToken); + if(ctModel == null) { + return; + } + // 删 ct、索引 + dao.deleteClientToken(clientToken); + dao.deleteClientTokenIndex(ctModel.clientId); + } + + /** + * 回收指定的 ClientToken,根据索引: clientId + * + * @param clientId / + */ + public void revokeClientTokenByIndex(String clientId) { + SaOAuth2Dao dao = SaOAuth2Manager.getDao(); + + // 删 clientToken + String clientToken = dao.getClientTokenValue(clientId); + if(clientToken != null) { + dao.deleteClientToken(clientToken); + dao.deleteClientTokenIndex(clientId); + } + + // 删 pastToken + String pastToken = dao.getPastTokenValue(clientId); + if(pastToken != null) { + dao.deletePastToken(pastToken); + dao.deletePastTokenIndex(clientId); + } + + } + + // ------------------- 包装其它 bean 的方法 diff --git a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/template/SaOAuth2Util.java b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/template/SaOAuth2Util.java index 1e2fe37c..223d7dcb 100644 --- a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/template/SaOAuth2Util.java +++ b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/template/SaOAuth2Util.java @@ -21,7 +21,6 @@ import cn.dev33.satoken.oauth2.data.model.ClientTokenModel; import cn.dev33.satoken.oauth2.data.model.CodeModel; import cn.dev33.satoken.oauth2.data.model.RefreshTokenModel; import cn.dev33.satoken.oauth2.data.model.loader.SaClientModel; -import cn.dev33.satoken.oauth2.processor.SaOAuth2ServerProcessor; import java.util.List; @@ -175,7 +174,25 @@ public class SaOAuth2Util { public static AccessTokenModel checkAccessTokenParam(String clientId, String clientSecret, String accessToken) { return SaOAuth2Manager.getTemplate().checkAccessTokenParam(clientId, clientSecret, accessToken); } - + + /** + * 回收指定的 ClientToken + * + * @param clientToken / + */ + public static void revokeClientToken(String clientToken) { + SaOAuth2Manager.getTemplate().revokeClientToken(clientToken); + } + + /** + * 回收指定的 ClientToken,根据索引:clientId + * + * @param clientId / + */ + public static void revokeClientTokenByIndex(String clientId) { + SaOAuth2Manager.getTemplate().revokeClientTokenByIndex(clientId); + } + // ------------------- save 数据 /**