diff --git a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/data/generate/SaOAuth2DataGenerateDefaultImpl.java b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/data/generate/SaOAuth2DataGenerateDefaultImpl.java index b8f5c4f7..a7582102 100644 --- a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/data/generate/SaOAuth2DataGenerateDefaultImpl.java +++ b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/data/generate/SaOAuth2DataGenerateDefaultImpl.java @@ -82,10 +82,10 @@ public class SaOAuth2DataGenerateDefaultImpl implements SaOAuth2DataGenerate { // 3、生成token AccessTokenModel at = dataConverter.convertCodeToAccessToken(cm); - SaOAuth2Strategy.instance.workAccessTokenByScope.accept(at); RefreshTokenModel rt = dataConverter.convertAccessTokenToRefreshToken(at); at.refreshToken = rt.refreshToken; at.refreshExpiresTime = rt.expiresTime; + SaOAuth2Strategy.instance.workAccessTokenByScope.accept(at); // 4、保存token dao.saveAccessToken(at); @@ -205,10 +205,11 @@ public class SaOAuth2DataGenerateDefaultImpl implements SaOAuth2DataGenerate { dao.saveClientToken(oldCt); } - // 3、生成新Client-Token + // 3、生成新 Client-Token String clientTokenValue = SaOAuth2Strategy.instance.createClientToken.execute(clientId, scopes); ClientTokenModel ct = new ClientTokenModel(clientTokenValue, clientId, scopes); ct.expiresTime = System.currentTimeMillis() + (cm.getClientTokenTimeout() * 1000); + SaOAuth2Strategy.instance.workClientTokenByScope.accept(ct); // 3、保存新Client-Token dao.saveClientToken(ct); diff --git a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/function/strategy/SaScopeWorkFunction.java b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/function/strategy/SaOAuth2ScopeWorkAccessTokenFunction.java similarity index 89% rename from sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/function/strategy/SaScopeWorkFunction.java rename to sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/function/strategy/SaOAuth2ScopeWorkAccessTokenFunction.java index 8068f266..96e997fa 100644 --- a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/function/strategy/SaScopeWorkFunction.java +++ b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/function/strategy/SaOAuth2ScopeWorkAccessTokenFunction.java @@ -26,9 +26,9 @@ import java.util.function.Consumer; *

返回:无

* * @author click33 - * @since 1.35.0 + * @since 1.39.0 */ @FunctionalInterface -public interface SaScopeWorkFunction extends Consumer { +public interface SaOAuth2ScopeWorkAccessTokenFunction extends Consumer { } \ No newline at end of file diff --git a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/function/strategy/SaOAuth2ScopeWorkClientTokenFunction.java b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/function/strategy/SaOAuth2ScopeWorkClientTokenFunction.java new file mode 100644 index 00000000..6193da52 --- /dev/null +++ b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/function/strategy/SaOAuth2ScopeWorkClientTokenFunction.java @@ -0,0 +1,34 @@ +/* + * Copyright 2020-2099 sa-token.cc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.dev33.satoken.oauth2.function.strategy; + +import cn.dev33.satoken.oauth2.data.model.ClientTokenModel; + +import java.util.function.Consumer; + +/** + * 函数式接口:ClientTokenModel 加工 + * + *

参数:ClientTokenModel

+ *

返回:无

+ * + * @author click33 + * @since 1.39.0 + */ +@FunctionalInterface +public interface SaOAuth2ScopeWorkClientTokenFunction extends Consumer { + +} \ No newline at end of file diff --git a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/scope/handler/OpenIdScopeHandler.java b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/scope/handler/OpenIdScopeHandler.java index 02d096d8..00da76b0 100644 --- a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/scope/handler/OpenIdScopeHandler.java +++ b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/scope/handler/OpenIdScopeHandler.java @@ -17,10 +17,11 @@ package cn.dev33.satoken.oauth2.scope.handler; import cn.dev33.satoken.oauth2.SaOAuth2Manager; import cn.dev33.satoken.oauth2.data.model.AccessTokenModel; +import cn.dev33.satoken.oauth2.data.model.ClientTokenModel; import cn.dev33.satoken.oauth2.scope.CommonScope; /** - * 所有OAuth2 权限处理器的父接口 + * OpenId 权限处理器 * * @author click33 * @since 1.39.0 @@ -34,12 +35,15 @@ public class OpenIdScopeHandler implements SaOAuth2ScopeAbstractHandler { return CommonScope.OPENID; } - /** - * 所需要执行的方法 - */ - public void work(AccessTokenModel at) { + @Override + public void workAccessToken(AccessTokenModel at) { System.out.println("追加 openid " + at.accessToken); at.openid = SaOAuth2Manager.getDataLoader().getOpenid(at.clientId, at.loginId); } + @Override + public void workClientToken(ClientTokenModel ct) { + + } + } \ No newline at end of file diff --git a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/scope/handler/SaOAuth2ScopeAbstractHandler.java b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/scope/handler/SaOAuth2ScopeAbstractHandler.java index f802eeb8..32aa8110 100644 --- a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/scope/handler/SaOAuth2ScopeAbstractHandler.java +++ b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/scope/handler/SaOAuth2ScopeAbstractHandler.java @@ -16,9 +16,10 @@ package cn.dev33.satoken.oauth2.scope.handler; import cn.dev33.satoken.oauth2.data.model.AccessTokenModel; +import cn.dev33.satoken.oauth2.data.model.ClientTokenModel; /** - * 所有OAuth2 权限处理器的父接口 + * 所有 OAuth2 权限处理器的父接口 * * @author click33 * @since 1.39.0 @@ -33,12 +34,17 @@ public interface SaOAuth2ScopeAbstractHandler { String getHandlerScope(); /** - * 所需要执行的方法 + * 当构建的 AccessToken 具有此权限时,所需要执行的方法 * * @param at / */ - default void work(AccessTokenModel at) { + void workAccessToken(AccessTokenModel at); - } + /** + * 当构建的 ClientToken 具有此权限时,所需要执行的方法 + * + * @param ct / + */ + void workClientToken(ClientTokenModel ct); } \ No newline at end of file diff --git a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/strategy/SaOAuth2Strategy.java b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/strategy/SaOAuth2Strategy.java index 18287065..ce0144f1 100644 --- a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/strategy/SaOAuth2Strategy.java +++ b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/strategy/SaOAuth2Strategy.java @@ -79,18 +79,29 @@ public final class SaOAuth2Strategy { /** * 根据 scope 信息对一个 AccessTokenModel 进行加工处理 */ - public SaScopeWorkFunction workAccessTokenByScope = (at) -> { - System.out.println("增强:" + at.accessToken); - System.out.println("权限:" + at.scopes); - // 遍历所有的权限处理器,如果此 AccessToken 具有这些权限,则开始加工 + public SaOAuth2ScopeWorkAccessTokenFunction workAccessTokenByScope = (at) -> { if(at.scopes != null && !at.scopes.isEmpty()) { - for (Map.Entry entry: scopeHandlerMap.entrySet()) { - if(at.scopes.contains(entry.getKey())) { - entry.getValue().work(at); + for (String scope : at.scopes) { + SaOAuth2ScopeAbstractHandler handler = scopeHandlerMap.get(scope); + if(handler != null) { + handler.workAccessToken(at); } } } + }; + /** + * 根据 scope 信息对一个 ClientTokenModel 进行加工处理 + */ + public SaOAuth2ScopeWorkClientTokenFunction workClientTokenByScope = (ct) -> { + if(ct.scopes != null && !ct.scopes.isEmpty()) { + for (String scope : ct.scopes) { + SaOAuth2ScopeAbstractHandler handler = scopeHandlerMap.get(scope); + if(handler != null) { + handler.workClientToken(ct); + } + } + } }; /**