From 172351ad04ae7a59a4f1160016e11ca43692c6e8 Mon Sep 17 00:00:00 2001 From: noear Date: Wed, 26 Jul 2023 10:15:36 +0800 Subject: [PATCH] =?UTF-8?q?sa-token-solon-plugin=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AF=B9=20solon=20=E7=BD=91=E5=85=B3=E7=9A=84=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../satoken/solon/integration/SaTokenFilter.java | 12 ++++++++++-- .../solon/integration/SaTokenInterceptor.java | 14 ++++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenFilter.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenFilter.java index e419e2e7..fd8210b9 100644 --- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenFilter.java +++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenFilter.java @@ -26,6 +26,7 @@ import cn.dev33.satoken.router.SaRouter; import cn.dev33.satoken.strategy.SaStrategy; import org.noear.solon.Solon; import org.noear.solon.core.handle.*; +import org.noear.solon.core.route.RoutingTable; import java.lang.reflect.Method; import java.util.ArrayList; @@ -136,6 +137,13 @@ public class SaTokenFilter implements SaFilter, Filter { //之所以改名,为 try { //查找当前主处理 Handler mainHandler = Solon.app().router().matchMain(ctx); + if (mainHandler instanceof Gateway) { + //支持网关处理 + Gateway gateway = (Gateway) mainHandler; + RoutingTable mainRouting = gateway.getMainRouting(); + MethodType method = MethodTypeUtil.valueOf(ctx.method()); + mainHandler = mainRouting.matchOne(ctx.pathNew(), method); + } Action action = (mainHandler instanceof Action ? (Action) mainHandler : null); //1.执行前置处理(主要是一些跨域之类的) @@ -144,16 +152,16 @@ public class SaTokenFilter implements SaFilter, Filter { //之所以改名,为 } //先路径过滤下(包括了静态文件) + Handler finalMainHandler = mainHandler; SaRouter.match(includeList).notMatch(excludeList).check(r -> { //2.执行注解处理 if(authAnno(action)) { //3.执行规则处理(如果没有被 @SaIgnore 忽略) - auth.run(mainHandler); + auth.run(finalMainHandler); } }); } catch (StopMatchException e) { // StopMatchException 异常代表:停止匹配,进入Controller - } catch (SaTokenException e) { // 1. 获取异常处理策略结果 Object result; diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenInterceptor.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenInterceptor.java index aee75b60..faf49725 100644 --- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenInterceptor.java +++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenInterceptor.java @@ -26,6 +26,7 @@ import cn.dev33.satoken.strategy.SaStrategy; import org.noear.solon.core.handle.*; import org.noear.solon.core.route.RouterInterceptor; import org.noear.solon.core.route.RouterInterceptorChain; +import org.noear.solon.core.route.RoutingTable; import java.lang.reflect.Method; import java.util.ArrayList; @@ -185,6 +186,14 @@ public class SaTokenInterceptor implements RouterInterceptor { @Override public void doIntercept(Context ctx, Handler mainHandler, RouterInterceptorChain chain) throws Throwable { try { + if (mainHandler instanceof Gateway) { + //支持网关处理 + Gateway gateway = (Gateway) mainHandler; + RoutingTable mainRouting = gateway.getMainRouting(); + MethodType method = MethodTypeUtil.valueOf(ctx.method()); + mainHandler = mainRouting.matchOne(ctx.pathNew(), method); + } + Action action = (mainHandler instanceof Action ? (Action) mainHandler : null); //1.执行前置处理(主要是一些跨域之类的) @@ -193,16 +202,17 @@ public class SaTokenInterceptor implements RouterInterceptor { } //先路径过滤下(不包括静态文件) + Handler finalMainHandler = mainHandler; SaRouter.match(includeList).notMatch(excludeList).check(r -> { //2.执行注解处理 if(authAnno(action)) { //3.执行规则处理(如果没有被 @SaIgnore 忽略) - auth.run(mainHandler); + auth.run(finalMainHandler); } }); + } catch (StopMatchException e) { // StopMatchException 异常代表:停止匹配,进入Controller - } catch (SaTokenException e) { // 1. 获取异常处理策略结果 Object result;