From 713e11482cd1d8ba1e6298541b28d26aa5f4ea24 Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Tue, 28 Sep 2021 23:57:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=9F=E5=BC=83=20SaTokenAction=20=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=8C=E6=96=B0=E5=A2=9E=20SaStrategy=20=E7=AD=96?= =?UTF-8?q?=E7=95=A5=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/dev33/satoken/SaManager.java | 15 +- .../dev33/satoken/action/SaTokenAction.java | 9 ++ .../action/SaTokenActionDefaultImpl.java | 4 +- .../satoken/session/SaSessionCustomUtil.java | 3 +- .../cn/dev33/satoken/sso/SaSsoTemplate.java | 3 +- .../java/cn/dev33/satoken/stp/StpLogic.java | 19 ++- .../cn/dev33/satoken/strategy/SaStrategy.java | 143 ++++++++++++++++++ .../dev33/satoken/temp/SaTempInterface.java | 3 +- .../java/com/pj/satoken/SaTokenConfigure.java | 46 +++++- .../com/pj/satoken/at/MySaTokenAction.java | 52 ------- .../oauth2/logic/SaOAuth2Template.java | 3 +- .../cn/dev33/satoken/aop/SaCheckAspect.java | 4 +- .../satoken/reactor/spring/SaBeanInject.java | 3 +- .../cn/dev33/satoken/solon/XPluginImp.java | 1 + .../integration/SaTokenMethodInterceptor.java | 7 +- .../interceptor/SaAnnotationInterceptor.java | 4 +- .../cn/dev33/satoken/spring/SaBeanInject.java | 3 +- 17 files changed, 234 insertions(+), 88 deletions(-) create mode 100644 sa-token-core/src/main/java/cn/dev33/satoken/strategy/SaStrategy.java delete mode 100644 sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/satoken/at/MySaTokenAction.java diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/SaManager.java b/sa-token-core/src/main/java/cn/dev33/satoken/SaManager.java index 4074d5b3..850fa360 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/SaManager.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/SaManager.java @@ -27,12 +27,13 @@ import cn.dev33.satoken.util.SaFoxUtil; * @author kong * */ +@SuppressWarnings("deprecation") public class SaManager { /** * 配置文件 Bean */ - public static SaTokenConfig config; + public volatile static SaTokenConfig config; public static void setConfig(SaTokenConfig config) { SaManager.config = config; if(config.getIsPrint()) { @@ -55,7 +56,7 @@ public class SaManager { /** * 持久化 Bean */ - private static SaTokenDao saTokenDao; + private volatile static SaTokenDao saTokenDao; public static void setSaTokenDao(SaTokenDao saTokenDao) { if((SaManager.saTokenDao instanceof SaTokenDaoDefaultImpl)) { ((SaTokenDaoDefaultImpl)SaManager.saTokenDao).endRefreshThread(); @@ -76,7 +77,7 @@ public class SaManager { /** * 权限认证 Bean */ - private static StpInterface stpInterface; + private volatile static StpInterface stpInterface; public static void setStpInterface(StpInterface stpInterface) { SaManager.stpInterface = stpInterface; } @@ -94,7 +95,7 @@ public class SaManager { /** * 框架行为 Bean */ - private static SaTokenAction saTokenAction; + private volatile static SaTokenAction saTokenAction; public static void setSaTokenAction(SaTokenAction saTokenAction) { SaManager.saTokenAction = saTokenAction; } @@ -112,7 +113,7 @@ public class SaManager { /** * 容器操作 Bean */ - private static SaTokenContext saTokenContext; + private volatile static SaTokenContext saTokenContext; public static void setSaTokenContext(SaTokenContext saTokenContext) { SaManager.saTokenContext = saTokenContext; } @@ -130,7 +131,7 @@ public class SaManager { /** * 侦听器 Bean */ - private static SaTokenListener saTokenListener; + private volatile static SaTokenListener saTokenListener; public static void setSaTokenListener(SaTokenListener saTokenListener) { SaManager.saTokenListener = saTokenListener; } @@ -148,7 +149,7 @@ public class SaManager { /** * 临时令牌验证模块 Bean */ - private static SaTempInterface saTemp; + private volatile static SaTempInterface saTemp; public static void setSaTemp(SaTempInterface saTemp) { SaManager.saTemp = saTemp; } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/action/SaTokenAction.java b/sa-token-core/src/main/java/cn/dev33/satoken/action/SaTokenAction.java index 0936d6ea..81b5eed0 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/action/SaTokenAction.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/action/SaTokenAction.java @@ -1,5 +1,6 @@ package cn.dev33.satoken.action; +import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Method; import java.util.List; @@ -8,9 +9,11 @@ import cn.dev33.satoken.session.SaSession; /** * Sa-Token 逻辑代理接口 *

此接口将会代理框架内部的一些关键性逻辑,方便开发者进行按需重写

+ *

v1.27+ 此接口已废弃,目前版本暂时向下兼容,请更换为 SaStrategy * @author kong * */ +@Deprecated public interface SaTokenAction { /** @@ -42,4 +45,10 @@ public interface SaTokenAction { */ public void checkMethodAnnotation(Method method); + /** + * 从指定元素校验注解 + * @param target / + */ + public void validateAnnotation(AnnotatedElement target); + } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/action/SaTokenActionDefaultImpl.java b/sa-token-core/src/main/java/cn/dev33/satoken/action/SaTokenActionDefaultImpl.java index 11a5d287..122de0a9 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/action/SaTokenActionDefaultImpl.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/action/SaTokenActionDefaultImpl.java @@ -18,9 +18,11 @@ import cn.dev33.satoken.util.SaTokenConsts; /** * Sa-Token 逻辑代理接口 [默认实现类] + *

v1.27+ 此接口已废弃,目前版本暂时向下兼容,请更换为 SaStrategy * @author kong * */ +@Deprecated public class SaTokenActionDefaultImpl implements SaTokenAction { /** @@ -110,7 +112,7 @@ public class SaTokenActionDefaultImpl implements SaTokenAction { * 从指定元素校验注解 * @param target see note */ - protected void validateAnnotation(AnnotatedElement target) { + public void validateAnnotation(AnnotatedElement target) { // 校验 @SaCheckLogin 注解 if(target.isAnnotationPresent(SaCheckLogin.class)) { diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSessionCustomUtil.java b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSessionCustomUtil.java index 21c6ec9d..bb787c02 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSessionCustomUtil.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSessionCustomUtil.java @@ -1,6 +1,7 @@ package cn.dev33.satoken.session; import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.strategy.SaStrategy; /** * 自定义Session工具类 @@ -45,7 +46,7 @@ public class SaSessionCustomUtil { public static SaSession getSessionById(String sessionId, boolean isCreate) { SaSession session = SaManager.getSaTokenDao().getSession(splicingSessionKey(sessionId)); if (session == null && isCreate) { - session = SaManager.getSaTokenAction().createSession(splicingSessionKey(sessionId)); + session = SaStrategy.me.createSession.apply(splicingSessionKey(sessionId)); SaManager.getSaTokenDao().setSession(session, SaManager.getConfig().getTimeout()); } return session; diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/sso/SaSsoTemplate.java b/sa-token-core/src/main/java/cn/dev33/satoken/sso/SaSsoTemplate.java index a30656ee..e7736cf4 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/sso/SaSsoTemplate.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/sso/SaSsoTemplate.java @@ -11,6 +11,7 @@ import cn.dev33.satoken.exception.SaTokenException; import cn.dev33.satoken.session.SaSession; import cn.dev33.satoken.sso.SaSsoConsts.ParamName; import cn.dev33.satoken.stp.StpLogic; +import cn.dev33.satoken.strategy.SaStrategy; import cn.dev33.satoken.util.SaFoxUtil; /** @@ -213,7 +214,7 @@ public class SaSsoTemplate { // 3、是否在[允许地址列表]之中 List authUrlList = Arrays.asList(getAllowUrl().replaceAll(" ", "").split(",")); - if(SaManager.getSaTokenAction().hasElement(authUrlList, url) == false) { + if(SaStrategy.me.hasElement.apply(authUrlList, url) == false) { throw new SaTokenException("非法redirect:" + url); } 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 6d1d9739..bd714216 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 @@ -25,6 +25,7 @@ import cn.dev33.satoken.exception.NotSafeException; import cn.dev33.satoken.fun.SaFunction; import cn.dev33.satoken.session.SaSession; import cn.dev33.satoken.session.TokenSign; +import cn.dev33.satoken.strategy.SaStrategy; import cn.dev33.satoken.util.SaFoxUtil; import cn.dev33.satoken.util.SaTokenConsts; @@ -85,7 +86,7 @@ public class StpLogic { * @return 生成的tokenValue */ public String createTokenValue(Object loginId) { - return SaManager.getSaTokenAction().createToken(loginId, loginType); + return SaStrategy.me.createToken.apply(loginId, loginType); } /** @@ -539,7 +540,7 @@ public class StpLogic { public SaSession getSessionBySessionId(String sessionId, boolean isCreate) { SaSession session = SaManager.getSaTokenDao().getSession(sessionId); if(session == null && isCreate) { - session = SaManager.getSaTokenAction().createSession(sessionId); + session = SaStrategy.me.createSession.apply(sessionId); SaManager.getSaTokenDao().setSession(session, getConfig().getTimeout()); } return session; @@ -842,8 +843,7 @@ public class StpLogic { */ public boolean hasRole(Object loginId, String role) { List roleList = SaManager.getStpInterface().getRoleList(loginId, loginType); - return SaManager.getSaTokenAction().hasElement(roleList, role); -// return !(roleList == null || roleList.contains(role) == false); + return SaStrategy.me.hasElement.apply(roleList, role); } /** @@ -873,7 +873,7 @@ public class StpLogic { Object loginId = getLoginId(); List roleList = SaManager.getStpInterface().getRoleList(loginId, loginType); for (String role : roleArray) { - if(!SaManager.getSaTokenAction().hasElement(roleList, role)) { + if(!SaStrategy.me.hasElement.apply(roleList, role)) { throw new NotRoleException(role, this.loginType); } } @@ -887,7 +887,7 @@ public class StpLogic { Object loginId = getLoginId(); List roleList = SaManager.getStpInterface().getRoleList(loginId, loginType); for (String role : roleArray) { - if(SaManager.getSaTokenAction().hasElement(roleList, role)) { + if(SaStrategy.me.hasElement.apply(roleList, role)) { // 有的话提前退出 return; } @@ -908,8 +908,7 @@ public class StpLogic { */ public boolean hasPermission(Object loginId, String permission) { List permissionList = SaManager.getStpInterface().getPermissionList(loginId, loginType); - return SaManager.getSaTokenAction().hasElement(permissionList, permission); -// return !(permissionList == null || permissionList.contains(permission) == false); + return SaStrategy.me.hasElement.apply(permissionList, permission); } /** @@ -939,7 +938,7 @@ public class StpLogic { Object loginId = getLoginId(); List permissionList = SaManager.getStpInterface().getPermissionList(loginId, loginType); for (String permission : permissionArray) { - if(!SaManager.getSaTokenAction().hasElement(permissionList, permission)) { + if(!SaStrategy.me.hasElement.apply(permissionList, permission)) { throw new NotPermissionException(permission, this.loginType); } } @@ -953,7 +952,7 @@ public class StpLogic { Object loginId = getLoginId(); List permissionList = SaManager.getStpInterface().getPermissionList(loginId, loginType); for (String permission : permissionArray) { - if(SaManager.getSaTokenAction().hasElement(permissionList, permission)) { + if(SaStrategy.me.hasElement.apply(permissionList, permission)) { // 有的话提前退出 return; } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/strategy/SaStrategy.java b/sa-token-core/src/main/java/cn/dev33/satoken/strategy/SaStrategy.java new file mode 100644 index 00000000..9fb0e697 --- /dev/null +++ b/sa-token-core/src/main/java/cn/dev33/satoken/strategy/SaStrategy.java @@ -0,0 +1,143 @@ +package cn.dev33.satoken.strategy; + +import java.lang.reflect.AnnotatedElement; +import java.lang.reflect.Method; +import java.util.List; +import java.util.function.BiFunction; +import java.util.function.Consumer; +import java.util.function.Function; + +import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.session.SaSession; + +/** + * Sa-Token 策略对象 + *

+ * 此类统一定义框架内的一些关键性逻辑算法,方便开发者进行按需重写 + *

+ * + * @author kong + * + */ +@SuppressWarnings("deprecation") +public final class SaStrategy { + + private SaStrategy() { + } + + /** + * 获取 SaStrategy 对象的单例引用 + */ + public static final SaStrategy me = new SaStrategy(); + + // + // 所有策略 + // + + /** + * 创建 Token 的策略 + *

参数 [账号id, 账号类型] + */ + public BiFunction createToken = (loginId, loginType) -> { + return SaManager.getSaTokenAction().createToken(loginId, loginType); + }; + + /** + * 创建 Session 的策略 + *

参数 [SessionId] + */ + public Function createSession = (sessionId) -> { + return SaManager.getSaTokenAction().createSession(sessionId); + }; + + /** + * 判断:集合中是否包含指定元素(模糊匹配) + *

参数 [集合, 元素] + */ + public BiFunction, String, Boolean> hasElement = (list, element) -> { + return SaManager.getSaTokenAction().hasElement(list, element); + }; + + /** + * 对一个 [Method] 对象进行注解校验 (注解鉴权内部实现) + *

参数 [Method句柄] + */ + public Consumer checkMethodAnnotation = (method) -> { + + // 先校验 Method 所属 Class 上的注解 + me.checkElementAnnotation.accept(method.getDeclaringClass()); + + // 再校验 Method 上的注解 + me.checkElementAnnotation.accept(method); + }; + + /** + * 对一个 [元素] 对象进行注解校验 (注解鉴权内部实现) + *

参数 [target元素] + */ + public Consumer checkElementAnnotation = (element) -> { + SaManager.getSaTokenAction().validateAnnotation(element); + }; + + + // + // 重写策略 set连缀风格 + // + + /** + * 重写创建 Token 的策略 + *

参数 [账号id, 账号类型] + * @param createToken / + * @return 对象自身 + */ + public SaStrategy setCreateToken(BiFunction createToken) { + this.createToken = createToken; + return this; + } + + /** + * 重写创建 Session 的策略 + *

参数 [SessionId] + * @param createSession / + * @return 对象自身 + */ + public SaStrategy setCreateSession(Function createSession) { + this.createSession = createSession; + return this; + } + + /** + * 判断:集合中是否包含指定元素(模糊匹配) + *

参数 [集合, 元素] + * @param hasElement / + * @return 对象自身 + */ + public SaStrategy setHasElement(BiFunction, String, Boolean> hasElement) { + this.hasElement = hasElement; + return this; + } + + /** + * 对一个 [Method] 对象进行注解校验 (注解鉴权内部实现) + *

参数 [Method句柄] + * @param checkMethodAnnotation / + * @return 对象自身 + */ + public SaStrategy setCheckMethodAnnotation(Consumer checkMethodAnnotation) { + this.checkMethodAnnotation = checkMethodAnnotation; + return this; + } + + /** + * 对一个 [元素] 对象进行注解校验 (注解鉴权内部实现) + *

参数 [target元素] + * @param checkElementAnnotation / + * @return 对象自身 + */ + public SaStrategy setCheckElementAnnotation(Consumer checkElementAnnotation) { + this.checkElementAnnotation = checkElementAnnotation; + return this; + } + + +} diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempInterface.java b/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempInterface.java index 8c3c9373..1cef35d5 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempInterface.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/temp/SaTempInterface.java @@ -1,6 +1,7 @@ package cn.dev33.satoken.temp; import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.strategy.SaStrategy; import cn.dev33.satoken.util.SaFoxUtil; /** @@ -19,7 +20,7 @@ public interface SaTempInterface { public default String createToken(Object value, long timeout) { // 生成 token - String token = SaManager.getSaTokenAction().createToken(null, null); + String token = SaStrategy.me.createToken.apply(null, null); // 持久化映射关系 String key = splicingKeyTempToken(token); diff --git a/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/satoken/SaTokenConfigure.java b/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/satoken/SaTokenConfigure.java index b2360c40..f15fc2df 100644 --- a/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/satoken/SaTokenConfigure.java +++ b/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/satoken/SaTokenConfigure.java @@ -1,15 +1,26 @@ package com.pj.satoken; +import javax.annotation.PostConstruct; + import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import com.pj.util.AjaxJson; +import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.annotation.SaCheckBasic; +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaCheckRole; +import cn.dev33.satoken.annotation.SaCheckSafe; +import cn.dev33.satoken.basic.SaBasicUtil; import cn.dev33.satoken.context.SaHolder; import cn.dev33.satoken.filter.SaServletFilter; import cn.dev33.satoken.interceptor.SaAnnotationInterceptor; +import cn.dev33.satoken.strategy.SaStrategy; /** @@ -21,7 +32,7 @@ import cn.dev33.satoken.interceptor.SaAnnotationInterceptor; public class SaTokenConfigure implements WebMvcConfigurer { /** - * 注册sa-token的拦截器,打开注解式鉴权功能 + * 注册Sa-Token 的拦截器,打开注解式鉴权功能 */ @Override public void addInterceptors(InterceptorRegistry registry) { @@ -30,7 +41,7 @@ public class SaTokenConfigure implements WebMvcConfigurer { } /** - * 注册 [sa-token全局过滤器] + * 注册 [Sa-Token 全局过滤器] */ @Bean public SaServletFilter getSaServletFilter() { @@ -69,5 +80,34 @@ public class SaTokenConfigure implements WebMvcConfigurer { ; } - + /** + * 重写 Sa-Token 框架内部算法策略 + */ + @PostConstruct + public void rewriteSaStrategy() { + // 重写Sa-Token的注解处理器,增加注解合并功能 + SaStrategy.me.setCheckElementAnnotation(element -> { + if(AnnotatedElementUtils.isAnnotated(element, SaCheckLogin.class)) { + SaCheckLogin at = AnnotatedElementUtils.getMergedAnnotation(element, SaCheckLogin.class); + SaManager.getStpLogic(at.type()).checkByAnnotation(at); + } + if(AnnotatedElementUtils.isAnnotated(element, SaCheckRole.class)) { + SaCheckRole at = AnnotatedElementUtils.getMergedAnnotation(element, SaCheckRole.class); + SaManager.getStpLogic(at.type()).checkByAnnotation(at); + } + if(AnnotatedElementUtils.isAnnotated(element, SaCheckPermission.class)) { + SaCheckPermission at = AnnotatedElementUtils.getMergedAnnotation(element, SaCheckPermission.class); + SaManager.getStpLogic(at.type()).checkByAnnotation(at); + } + if(AnnotatedElementUtils.isAnnotated(element, SaCheckSafe.class)) { + SaCheckSafe at = AnnotatedElementUtils.getMergedAnnotation(element, SaCheckSafe.class); + SaManager.getStpLogic(null).checkByAnnotation(at); + } + if(AnnotatedElementUtils.isAnnotated(element, SaCheckBasic.class)) { + SaCheckBasic at = AnnotatedElementUtils.getMergedAnnotation(element, SaCheckBasic.class); + SaBasicUtil.check(at.realm(), at.account()); + } + }); + } + } diff --git a/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/satoken/at/MySaTokenAction.java b/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/satoken/at/MySaTokenAction.java deleted file mode 100644 index 069abc81..00000000 --- a/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/satoken/at/MySaTokenAction.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.pj.satoken.at; - -import java.lang.reflect.AnnotatedElement; - -import org.springframework.core.annotation.AnnotatedElementUtils; - -import cn.dev33.satoken.SaManager; -import cn.dev33.satoken.action.SaTokenActionDefaultImpl; -import cn.dev33.satoken.annotation.SaCheckLogin; -import cn.dev33.satoken.annotation.SaCheckPermission; -import cn.dev33.satoken.annotation.SaCheckRole; -import cn.dev33.satoken.annotation.SaCheckSafe; - -/** - * 继承Sa-Token行为Bean默认实现, 重写部分逻辑 - */ -//@Component -public class MySaTokenAction extends SaTokenActionDefaultImpl { - - /** - * 重写Sa-Token的注解处理器,加强注解合并功能 - * @param target see note - */ - @Override - protected void validateAnnotation(AnnotatedElement target) { - - // 校验 @SaCheckLogin 注解 - if(AnnotatedElementUtils.isAnnotated(target, SaCheckLogin.class)) { - SaCheckLogin at = AnnotatedElementUtils.getMergedAnnotation(target, SaCheckLogin.class); - SaManager.getStpLogic(at.type()).checkByAnnotation(at); - } - - // 校验 @SaCheckRole 注解 - if(AnnotatedElementUtils.isAnnotated(target, SaCheckRole.class)) { - SaCheckRole at = AnnotatedElementUtils.getMergedAnnotation(target, SaCheckRole.class); - SaManager.getStpLogic(at.type()).checkByAnnotation(at); - } - - // 校验 @SaCheckPermission 注解 - if(AnnotatedElementUtils.isAnnotated(target, SaCheckPermission.class)) { - SaCheckPermission at = AnnotatedElementUtils.getMergedAnnotation(target, SaCheckPermission.class); - SaManager.getStpLogic(at.type()).checkByAnnotation(at); - } - - // 校验 @SaCheckSafe 注解 - if(AnnotatedElementUtils.isAnnotated(target, SaCheckSafe.class)) { - SaCheckSafe at = AnnotatedElementUtils.getMergedAnnotation(target, SaCheckSafe.class); - SaManager.getStpLogic(null).checkByAnnotation(at); - } - } - -} \ No newline at end of file diff --git a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/logic/SaOAuth2Template.java b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/logic/SaOAuth2Template.java index ea93e634..dca5f2f2 100644 --- a/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/logic/SaOAuth2Template.java +++ b/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/logic/SaOAuth2Template.java @@ -13,6 +13,7 @@ import cn.dev33.satoken.oauth2.model.CodeModel; import cn.dev33.satoken.oauth2.model.RefreshTokenModel; import cn.dev33.satoken.oauth2.model.RequestAuthModel; import cn.dev33.satoken.oauth2.model.SaClientModel; +import cn.dev33.satoken.strategy.SaStrategy; import cn.dev33.satoken.util.SaFoxUtil; /** @@ -358,7 +359,7 @@ public class SaOAuth2Template { // 3、是否在[允许地址列表]之中 List allowList = SaFoxUtil.convertStringToList(checkClientModel(clientId).allowUrl); - if(SaManager.getSaTokenAction().hasElement(allowList, url) == false) { + if(SaStrategy.me.hasElement.apply(allowList, url) == false) { throw new SaOAuth2Exception("非法redirect_url:" + url); } } diff --git a/sa-token-plugin/sa-token-spring-aop/src/main/java/cn/dev33/satoken/aop/SaCheckAspect.java b/sa-token-plugin/sa-token-spring-aop/src/main/java/cn/dev33/satoken/aop/SaCheckAspect.java index 9a1c3e78..309435e0 100644 --- a/sa-token-plugin/sa-token-spring-aop/src/main/java/cn/dev33/satoken/aop/SaCheckAspect.java +++ b/sa-token-plugin/sa-token-spring-aop/src/main/java/cn/dev33/satoken/aop/SaCheckAspect.java @@ -8,7 +8,7 @@ import org.aspectj.lang.reflect.MethodSignature; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; -import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.strategy.SaStrategy; import cn.dev33.satoken.util.SaTokenConsts; /** @@ -56,7 +56,7 @@ public class SaCheckAspect { // 注解鉴权 MethodSignature signature = (MethodSignature) joinPoint.getSignature(); - SaManager.getSaTokenAction().checkMethodAnnotation(signature.getMethod()); + SaStrategy.me.checkMethodAnnotation.accept(signature.getMethod()); try { // 执行原有逻辑 diff --git a/sa-token-starter/sa-token-reactor-spring-boot-starter/src/main/java/cn/dev33/satoken/reactor/spring/SaBeanInject.java b/sa-token-starter/sa-token-reactor-spring-boot-starter/src/main/java/cn/dev33/satoken/reactor/spring/SaBeanInject.java index a6fd9863..75751c80 100644 --- a/sa-token-starter/sa-token-reactor-spring-boot-starter/src/main/java/cn/dev33/satoken/reactor/spring/SaBeanInject.java +++ b/sa-token-starter/sa-token-reactor-spring-boot-starter/src/main/java/cn/dev33/satoken/reactor/spring/SaBeanInject.java @@ -5,7 +5,6 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.util.PathMatcher; import cn.dev33.satoken.SaManager; -import cn.dev33.satoken.action.SaTokenAction; import cn.dev33.satoken.basic.SaBasicTemplate; import cn.dev33.satoken.basic.SaBasicUtil; import cn.dev33.satoken.config.SaTokenConfig; @@ -63,7 +62,7 @@ public class SaBeanInject { * @param saTokenAction SaTokenAction对象 */ @Autowired(required = false) - public void setSaTokenAction(SaTokenAction saTokenAction) { + public void setSaTokenAction(@SuppressWarnings("deprecation") cn.dev33.satoken.action.SaTokenAction saTokenAction) { SaManager.setSaTokenAction(saTokenAction); } diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/XPluginImp.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/XPluginImp.java index 4765dd73..e665ff01 100644 --- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/XPluginImp.java +++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/XPluginImp.java @@ -29,6 +29,7 @@ import cn.dev33.satoken.temp.SaTempInterface; * @author noear * @since 1.4 */ +@SuppressWarnings("deprecation") public class XPluginImp implements Plugin { @Override diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenMethodInterceptor.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenMethodInterceptor.java index d18e737c..950b05e2 100644 --- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenMethodInterceptor.java +++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenMethodInterceptor.java @@ -1,9 +1,10 @@ package cn.dev33.satoken.solon.integration; -import cn.dev33.satoken.SaManager; import org.noear.solon.core.aspect.Interceptor; import org.noear.solon.core.aspect.Invocation; +import cn.dev33.satoken.strategy.SaStrategy; + /** * @author noear * @since 1.4 @@ -14,8 +15,8 @@ public class SaTokenMethodInterceptor implements Interceptor { @Override public Object doIntercept(Invocation inv) throws Throwable { - // 注解鉴权 - SaManager.getSaTokenAction().checkMethodAnnotation(inv.method().getMethod()); + // 注解鉴权 + SaStrategy.me.checkMethodAnnotation.accept(inv.method().getMethod()); // 执行原有逻辑 return inv.invoke(); diff --git a/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/interceptor/SaAnnotationInterceptor.java b/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/interceptor/SaAnnotationInterceptor.java index 18c68614..28ebc964 100644 --- a/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/interceptor/SaAnnotationInterceptor.java +++ b/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/interceptor/SaAnnotationInterceptor.java @@ -8,7 +8,7 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; -import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.strategy.SaStrategy; /** * 注解式鉴权 - 拦截器 @@ -37,7 +37,7 @@ public class SaAnnotationInterceptor implements HandlerInterceptor { Method method = ((HandlerMethod) handler).getMethod(); // 进行验证 - SaManager.getSaTokenAction().checkMethodAnnotation(method); + SaStrategy.me.checkMethodAnnotation.accept(method); // 通过验证 return true; diff --git a/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaBeanInject.java b/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaBeanInject.java index aeed065a..7390a52c 100644 --- a/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaBeanInject.java +++ b/sa-token-starter/sa-token-spring-boot-starter/src/main/java/cn/dev33/satoken/spring/SaBeanInject.java @@ -5,7 +5,6 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.util.PathMatcher; import cn.dev33.satoken.SaManager; -import cn.dev33.satoken.action.SaTokenAction; import cn.dev33.satoken.basic.SaBasicTemplate; import cn.dev33.satoken.basic.SaBasicUtil; import cn.dev33.satoken.config.SaTokenConfig; @@ -63,7 +62,7 @@ public class SaBeanInject { * @param saTokenAction SaTokenAction对象 */ @Autowired(required = false) - public void setSaTokenAction(SaTokenAction saTokenAction) { + public void setSaTokenAction(@SuppressWarnings("deprecation") cn.dev33.satoken.action.SaTokenAction saTokenAction) { SaManager.setSaTokenAction(saTokenAction); }