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 085a078e..8d7d54b3 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 @@ -21,9 +21,7 @@ import cn.dev33.satoken.apikey.loader.SaApiKeyDataLoaderDefaultImpl; import cn.dev33.satoken.config.SaTokenConfig; import cn.dev33.satoken.config.SaTokenConfigFactory; import cn.dev33.satoken.context.SaTokenContext; -import cn.dev33.satoken.context.SaTokenContextDefaultImpl; import cn.dev33.satoken.context.SaTokenContextForThreadLocal; -import cn.dev33.satoken.context.second.SaTokenSecondContext; import cn.dev33.satoken.dao.SaTokenDao; import cn.dev33.satoken.dao.SaTokenDaoDefaultImpl; import cn.dev33.satoken.error.SaErrorCode; @@ -148,7 +146,7 @@ public class SaManager { } /** - * 一级上下文 SaTokenContextContext + * 上下文 SaTokenContext */ private volatile static SaTokenContext saTokenContext; public static void setSaTokenContext(SaTokenContext saTokenContext) { @@ -166,42 +164,6 @@ public class SaManager { return saTokenContext; } - /** - * 二级上下文 SaTokenSecondContext - */ - private volatile static SaTokenSecondContext saTokenSecondContext; - public static void setSaTokenSecondContext(SaTokenSecondContext saTokenSecondContext) { - SaManager.saTokenSecondContext = saTokenSecondContext; - SaTokenEventCenter.doRegisterComponent("SaTokenSecondContext", saTokenSecondContext); - } - public static SaTokenSecondContext getSaTokenSecondContext() { - return saTokenSecondContext; - } - - /** - * 获取一个可用的 SaTokenContext (按照一级上下文、二级上下文、默认上下文的顺序来判断) - * @return / - */ - public static SaTokenContext getSaTokenContextOrSecond() { - - // s1. 一级Context可用时返回一级Context - if(saTokenContext != null) { - if(saTokenSecondContext == null || saTokenContext.isValid()) { - // 因为 isValid 是一个耗时操作,所以此处假定:二级Context为null的情况下无需验证一级Context有效性 - // 这样可以提升6倍左右的上下文获取速度 - return saTokenContext; - } - } - - // s2. 一级Context不可用时判断二级Context是否可用 - if(saTokenSecondContext != null && saTokenSecondContext.isValid()) { - return saTokenSecondContext; - } - - // s3. 都不行,就返回默认的 Context - return SaTokenContextDefaultImpl.defaultContext; - } - /** * 临时 token 认证模块 */ diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContext.java b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContext.java index fd3f7e79..2c4e550e 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContext.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContext.java @@ -18,6 +18,7 @@ package cn.dev33.satoken.context; import cn.dev33.satoken.context.model.SaRequest; import cn.dev33.satoken.context.model.SaResponse; import cn.dev33.satoken.context.model.SaStorage; +import cn.dev33.satoken.context.model.SaTokenContextModelBox; /** * Sa-Token 上下文处理器 @@ -30,37 +31,59 @@ import cn.dev33.satoken.context.model.SaStorage; public interface SaTokenContext { /** - * 获取当前请求的 Request 包装对象 + * 初始化上下文 + * + * @param req / + * @param res / + * @param stg / + */ + void setContext(SaRequest req, SaResponse res, SaStorage stg); + + /** + * 清除化上下文 + */ + void clearContext(); + + /** + * 判断当前上下文是否可用 + * + * @return / + */ + boolean isValid(); + + /** + * 获取 Box 对象 + */ + SaTokenContextModelBox getModelBox(); + + /** + * 获取当前上下文的 Request 包装对象 * @see SaRequest * * @return / */ - SaRequest getRequest(); + default SaRequest getRequest() { + return getModelBox().getRequest(); + } /** - * 获取当前请求的 Response 包装对象 + * 获取当前上下文的 Response 包装对象 * @see SaResponse * * @return / */ - SaResponse getResponse(); + default SaResponse getResponse(){ + return getModelBox().getResponse(); + } /** - * 获取当前请求的 Storage 包装对象 + * 获取当前上下文的 Storage 包装对象 * @see SaStorage * * @return / */ - SaStorage getStorage(); - - /** - * 判断:在本次请求中,此上下文是否可用。 - *
例如在部分 rpc 调用时, 一级上下文会返回 false,这时候框架就会选择使用二级上下文来处理请求
- * - * @return / - */ - default boolean isValid() { - return false; + default SaStorage getStorage(){ + return getModelBox().getStorage(); } - + } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextDefaultImpl.java b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextDefaultImpl.java index 70cc0976..18eff292 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextDefaultImpl.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextDefaultImpl.java @@ -18,6 +18,7 @@ package cn.dev33.satoken.context; import cn.dev33.satoken.context.model.SaRequest; import cn.dev33.satoken.context.model.SaResponse; import cn.dev33.satoken.context.model.SaStorage; +import cn.dev33.satoken.context.model.SaTokenContextModelBox; import cn.dev33.satoken.error.SaErrorCode; import cn.dev33.satoken.exception.SaTokenContextException; @@ -44,6 +45,26 @@ public class SaTokenContextDefaultImpl implements SaTokenContext { */ public static final String ERROR_MESSAGE = "未能获取有效的上下文处理器"; + @Override + public void setContext(SaRequest req, SaResponse res, SaStorage stg) { + throw new SaTokenContextException(ERROR_MESSAGE).setCode(SaErrorCode.CODE_10001); + } + + @Override + public void clearContext() { + throw new SaTokenContextException(ERROR_MESSAGE).setCode(SaErrorCode.CODE_10001); + } + + @Override + public boolean isValid() { + throw new SaTokenContextException(ERROR_MESSAGE).setCode(SaErrorCode.CODE_10001); + } + + @Override + public SaTokenContextModelBox getModelBox() { + throw new SaTokenContextException(ERROR_MESSAGE).setCode(SaErrorCode.CODE_10001); + } + @Override public SaRequest getRequest() { throw new SaTokenContextException(ERROR_MESSAGE).setCode(SaErrorCode.CODE_10001); diff --git a/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/SaTokenSecondContextCreatorForDubbo3.java b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForReadOnly.java similarity index 52% rename from sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/SaTokenSecondContextCreatorForDubbo3.java rename to sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForReadOnly.java index 1bc7357b..e57b3ef0 100644 --- a/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/SaTokenSecondContextCreatorForDubbo3.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForReadOnly.java @@ -13,23 +13,34 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package cn.dev33.satoken.context.dubbo3; +package cn.dev33.satoken.context; - -import cn.dev33.satoken.context.second.SaTokenSecondContext; -import cn.dev33.satoken.context.second.SaTokenSecondContextCreator; +import cn.dev33.satoken.context.model.SaRequest; +import cn.dev33.satoken.context.model.SaResponse; +import cn.dev33.satoken.context.model.SaStorage; +import cn.dev33.satoken.context.model.SaTokenContextModelBox; /** - * Sa-Token 二级上下文 - 创建器 [Dubbo3版] + * Sa-Token 上下文处理器次级实现:只读上下文 * * @author click33 - * @since 1.34.0 + * @since 1.42.0 */ -public class SaTokenSecondContextCreatorForDubbo3 implements SaTokenSecondContextCreator { +public interface SaTokenContextForReadOnly extends SaTokenContext { @Override - public SaTokenSecondContext create() { - return new SaTokenSecondContextForDubbo3(); + default void setContext(SaRequest req, SaResponse res, SaStorage stg) { + + } + + @Override + default void clearContext() { + + } + + @Override + default SaTokenContextModelBox getModelBox() { + return null; } } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocal.java b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocal.java index fd5395c1..12ce468a 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocal.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocal.java @@ -18,6 +18,7 @@ package cn.dev33.satoken.context; import cn.dev33.satoken.context.model.SaRequest; import cn.dev33.satoken.context.model.SaResponse; import cn.dev33.satoken.context.model.SaStorage; +import cn.dev33.satoken.context.model.SaTokenContextModelBox; /** * Sa-Token 上下文处理器 [ ThreadLocal 版本 ] @@ -35,23 +36,23 @@ import cn.dev33.satoken.context.model.SaStorage; public class SaTokenContextForThreadLocal implements SaTokenContext { @Override - public SaRequest getRequest() { - return SaTokenContextForThreadLocalStorage.getRequest(); + public void setContext(SaRequest req, SaResponse res, SaStorage stg) { + SaTokenContextForThreadLocalStaff.setModelBox(req, res, stg); } @Override - public SaResponse getResponse() { - return SaTokenContextForThreadLocalStorage.getResponse(); - } - - @Override - public SaStorage getStorage() { - return SaTokenContextForThreadLocalStorage.getStorage(); + public void clearContext() { + SaTokenContextForThreadLocalStaff.clearModelBox(); } @Override public boolean isValid() { - return SaTokenContextForThreadLocalStorage.getBox() != null; + return SaTokenContextForThreadLocalStaff.getModelBoxOrNull() != null; + } + + @Override + public SaTokenContextModelBox getModelBox() { + return SaTokenContextForThreadLocalStaff.getModelBox(); } } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocalStorage.java b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocalStaff.java similarity index 54% rename from sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocalStorage.java rename to sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocalStaff.java index a6179a3d..9d640521 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocalStorage.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/context/SaTokenContextForThreadLocalStaff.java @@ -18,6 +18,7 @@ package cn.dev33.satoken.context; import cn.dev33.satoken.context.model.SaRequest; import cn.dev33.satoken.context.model.SaResponse; import cn.dev33.satoken.context.model.SaStorage; +import cn.dev33.satoken.context.model.SaTokenContextModelBox; import cn.dev33.satoken.error.SaErrorCode; import cn.dev33.satoken.exception.SaTokenContextException; @@ -29,12 +30,12 @@ import cn.dev33.satoken.exception.SaTokenContextException; * @author click33 * @since 1.16.0 */ -public class SaTokenContextForThreadLocalStorage { +public class SaTokenContextForThreadLocalStaff { /** * 基于 ThreadLocal 的 [ Box 存储器 ] */ - public static ThreadLocal (利用继承机制实现区别 [ 一级Context ] 与 [ 二级Context ] 的目的)
- *
- * @see SaTokenContext SaTokenContext 上下文处理器
- *
- * @author click33
- * @since 1.28.0
- */
-public interface SaTokenSecondContext extends SaTokenContext {
-
-}
diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/context/second/SaTokenSecondContextCreator.java b/sa-token-core/src/main/java/cn/dev33/satoken/context/second/SaTokenSecondContextCreator.java
deleted file mode 100644
index 7a823dfb..00000000
--- a/sa-token-core/src/main/java/cn/dev33/satoken/context/second/SaTokenSecondContextCreator.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.context.second;
-
-/**
- * Sa-Token 二级Context - 创建器
- *
- * @author click33
- * @since 1.28.0
- */
-@FunctionalInterface
-public interface SaTokenSecondContextCreator {
-
- /**
- * 创建一个二级 Context 处理器
- * @return /
- */
- SaTokenSecondContext create();
-
-}
diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/util/SaTokenConsts.java b/sa-token-core/src/main/java/cn/dev33/satoken/util/SaTokenConsts.java
index bca48cd3..1797da75 100644
--- a/sa-token-core/src/main/java/cn/dev33/satoken/util/SaTokenConsts.java
+++ b/sa-token-core/src/main/java/cn/dev33/satoken/util/SaTokenConsts.java
@@ -206,6 +206,16 @@ public class SaTokenConsts {
*/
public static final int SA_TOKEN_CONTEXT_FILTER_ORDER = -104;
+ /**
+ * RPC 框架权限过滤器的注册顺序
+ */
+ public static final int RPC_PERMISSION_FILTER_ORDER = -30000;
+
+ /**
+ * RPC 框架上下文过滤器的注册顺序
+ */
+ public static final int RPC_CONTEXT_FILTER_ORDER = -30005;
+
/**
* Content-Type key
*/
diff --git a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-consumer/src/main/java/com/pj/more/TestController.java b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-consumer/src/main/java/com/pj/controller/TestController.java
similarity index 55%
rename from sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-consumer/src/main/java/com/pj/more/TestController.java
rename to sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-consumer/src/main/java/com/pj/controller/TestController.java
index 096afb38..9c8d9af7 100644
--- a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-consumer/src/main/java/com/pj/more/TestController.java
+++ b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-consumer/src/main/java/com/pj/controller/TestController.java
@@ -1,32 +1,33 @@
-package com.pj.more;
+package com.pj.controller;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.util.SaResult;
+import com.pj.service.DemoService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import cn.dev33.satoken.stp.StpUtil;
-
@RestController
public class TestController {
@DubboReference
private DemoService demoService;
- // Consumer端登录,状态传播到Provider端
+ // Consumer端登录,状态传播到Provider端 --- http://localhost:8081/test
@RequestMapping("test")
- public String test() {
+ public SaResult test() {
demoService.isLogin("----------- 登录前 ");
StpUtil.login(10001);
demoService.isLogin("----------- 登录后 ");
- return "ok";
+ return SaResult.ok();
}
- // Provider端登录,状态回传到Consumer端
+ // Provider端登录,状态回传到Consumer端 --- http://localhost:8081/test2
@RequestMapping("test2")
- public String test2() {
+ public SaResult test2() {
System.out.println("----------- 登录前 ");
System.out.println("Token值:" + StpUtil.getTokenValue());
System.out.println("是否登录:" + StpUtil.isLogin());
@@ -35,38 +36,38 @@ public class TestController {
System.out.println("----------- 登录后 ");
System.out.println("Token值:" + StpUtil.getTokenValue());
- System.out.println("是否登录:" + StpUtil.isLogin());
-
- return "ok";
+ System.out.println("是否登录:" + StpUtil.isLogin());
+
+ return SaResult.ok();
}
- // Consumer端登录,状态在Consumer端保持
+ // Consumer端登录,状态在Consumer端保持 --- http://localhost:8081/test3
@RequestMapping("test3")
- public String test3() {
+ public SaResult test3() {
System.out.println("----------- 登录前 ");
- System.out.println("Token值:" + StpUtil.getTokenValue());
- System.out.println("是否登录:" + StpUtil.isLogin());
+ System.out.println("Token值:" + StpUtil.getTokenValue());
+ System.out.println("是否登录:" + StpUtil.isLogin());
StpUtil.login(10003);
demoService.isLogin("----------- Provider状态");
-
+
System.out.println("----------- 登录后 ");
- System.out.println("Token值:" + StpUtil.getTokenValue());
- System.out.println("是否登录:" + StpUtil.isLogin());
-
- return "ok";
+ System.out.println("Token值:" + StpUtil.getTokenValue());
+ System.out.println("是否登录:" + StpUtil.isLogin());
+
+ return SaResult.ok();
}
- // Provider端登录,状态在Provider端保持
+ // Provider端登录,状态在Provider端保持 --- http://localhost:8081/test4
@RequestMapping("test4")
- public String test4() {
+ public SaResult test4() {
// 登录
demoService.doLogin(10004);
// 打印一下
demoService.isLogin("----------- 会话信息 ");
-
- return "ok";
+
+ return SaResult.ok();
}
}
\ No newline at end of file
diff --git a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/more/DemoService.java b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-consumer/src/main/java/com/pj/service/DemoService.java
similarity index 89%
rename from sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/more/DemoService.java
rename to sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-consumer/src/main/java/com/pj/service/DemoService.java
index 392a2ead..e502673d 100644
--- a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/more/DemoService.java
+++ b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-consumer/src/main/java/com/pj/service/DemoService.java
@@ -1,4 +1,4 @@
-package com.pj.more;
+package com.pj.service;
public interface DemoService {
diff --git a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/controller/TestController.java b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/controller/TestController.java
new file mode 100644
index 00000000..b745296b
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/controller/TestController.java
@@ -0,0 +1,28 @@
+package com.pj.controller;
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.util.SaResult;
+import com.pj.service.DemoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class TestController {
+
+ @Autowired
+ private DemoService demoService;
+
+ // test
+ @RequestMapping("test")
+ public SaResult test() {
+ demoService.isLogin("----------- 登录前 " + StpUtil.isLogin());
+
+ StpUtil.login(10001);
+
+ demoService.isLogin("----------- 登录后 " + StpUtil.isLogin());
+
+ return SaResult.ok();
+ }
+
+}
\ No newline at end of file
diff --git a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-consumer/src/main/java/com/pj/more/DemoService.java b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/service/DemoService.java
similarity index 89%
rename from sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-consumer/src/main/java/com/pj/more/DemoService.java
rename to sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/service/DemoService.java
index 392a2ead..e502673d 100644
--- a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-consumer/src/main/java/com/pj/more/DemoService.java
+++ b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/service/DemoService.java
@@ -1,4 +1,4 @@
-package com.pj.more;
+package com.pj.service;
public interface DemoService {
diff --git a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/more/DemoServiceImpl.java b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/service/DemoServiceImpl.java
similarity index 94%
rename from sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/more/DemoServiceImpl.java
rename to sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/service/DemoServiceImpl.java
index 8cfe559c..ab7341ef 100644
--- a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/more/DemoServiceImpl.java
+++ b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-provider/src/main/java/com/pj/service/DemoServiceImpl.java
@@ -1,4 +1,4 @@
-package com.pj.more;
+package com.pj.service;
import org.apache.dubbo.config.annotation.DubboService;
diff --git a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-consumer/src/main/java/com/pj/more/TestController.java b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-consumer/src/main/java/com/pj/controller/TestController.java
similarity index 78%
rename from sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-consumer/src/main/java/com/pj/more/TestController.java
rename to sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-consumer/src/main/java/com/pj/controller/TestController.java
index 096afb38..fb40bde2 100644
--- a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-consumer/src/main/java/com/pj/more/TestController.java
+++ b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-consumer/src/main/java/com/pj/controller/TestController.java
@@ -1,11 +1,12 @@
-package com.pj.more;
+package com.pj.controller;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.util.SaResult;
+import com.pj.service.DemoService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-import cn.dev33.satoken.stp.StpUtil;
-
@RestController
public class TestController {
@@ -14,19 +15,19 @@ public class TestController {
// Consumer端登录,状态传播到Provider端
@RequestMapping("test")
- public String test() {
+ public SaResult test() {
demoService.isLogin("----------- 登录前 ");
StpUtil.login(10001);
demoService.isLogin("----------- 登录后 ");
- return "ok";
+ return SaResult.ok();
}
// Provider端登录,状态回传到Consumer端
@RequestMapping("test2")
- public String test2() {
+ public SaResult test2() {
System.out.println("----------- 登录前 ");
System.out.println("Token值:" + StpUtil.getTokenValue());
System.out.println("是否登录:" + StpUtil.isLogin());
@@ -35,14 +36,14 @@ public class TestController {
System.out.println("----------- 登录后 ");
System.out.println("Token值:" + StpUtil.getTokenValue());
- System.out.println("是否登录:" + StpUtil.isLogin());
-
- return "ok";
+ System.out.println("是否登录:" + StpUtil.isLogin());
+
+ return SaResult.ok();
}
// Consumer端登录,状态在Consumer端保持
@RequestMapping("test3")
- public String test3() {
+ public SaResult test3() {
System.out.println("----------- 登录前 ");
System.out.println("Token值:" + StpUtil.getTokenValue());
System.out.println("是否登录:" + StpUtil.isLogin());
@@ -52,21 +53,21 @@ public class TestController {
System.out.println("----------- 登录后 ");
System.out.println("Token值:" + StpUtil.getTokenValue());
- System.out.println("是否登录:" + StpUtil.isLogin());
-
- return "ok";
+ System.out.println("是否登录:" + StpUtil.isLogin());
+
+ return SaResult.ok();
}
// Provider端登录,状态在Provider端保持
@RequestMapping("test4")
- public String test4() {
+ public SaResult test4() {
// 登录
demoService.doLogin(10004);
// 打印一下
demoService.isLogin("----------- 会话信息 ");
-
- return "ok";
+
+ return SaResult.ok();
}
}
\ No newline at end of file
diff --git a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/more/DemoService.java b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-consumer/src/main/java/com/pj/service/DemoService.java
similarity index 89%
rename from sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/more/DemoService.java
rename to sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-consumer/src/main/java/com/pj/service/DemoService.java
index 392a2ead..e502673d 100644
--- a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/more/DemoService.java
+++ b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-consumer/src/main/java/com/pj/service/DemoService.java
@@ -1,4 +1,4 @@
-package com.pj.more;
+package com.pj.service;
public interface DemoService {
diff --git a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/controller/TestController.java b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/controller/TestController.java
new file mode 100644
index 00000000..b745296b
--- /dev/null
+++ b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/controller/TestController.java
@@ -0,0 +1,28 @@
+package com.pj.controller;
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.util.SaResult;
+import com.pj.service.DemoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class TestController {
+
+ @Autowired
+ private DemoService demoService;
+
+ // test
+ @RequestMapping("test")
+ public SaResult test() {
+ demoService.isLogin("----------- 登录前 " + StpUtil.isLogin());
+
+ StpUtil.login(10001);
+
+ demoService.isLogin("----------- 登录后 " + StpUtil.isLogin());
+
+ return SaResult.ok();
+ }
+
+}
\ No newline at end of file
diff --git a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-consumer/src/main/java/com/pj/more/DemoService.java b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/service/DemoService.java
similarity index 89%
rename from sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-consumer/src/main/java/com/pj/more/DemoService.java
rename to sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/service/DemoService.java
index 392a2ead..e502673d 100644
--- a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo-consumer/src/main/java/com/pj/more/DemoService.java
+++ b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/service/DemoService.java
@@ -1,4 +1,4 @@
-package com.pj.more;
+package com.pj.service;
public interface DemoService {
diff --git a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/more/DemoServiceImpl.java b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/service/DemoServiceImpl.java
similarity index 94%
rename from sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/more/DemoServiceImpl.java
rename to sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/service/DemoServiceImpl.java
index 8cfe559c..ab7341ef 100644
--- a/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/more/DemoServiceImpl.java
+++ b/sa-token-demo/sa-token-demo-dubbo/sa-token-demo-dubbo3-provider/src/main/java/com/pj/service/DemoServiceImpl.java
@@ -1,4 +1,4 @@
-package com.pj.more;
+package com.pj.service;
import org.apache.dubbo.config.annotation.DubboService;
diff --git a/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/SaTokenSecondContextCreatorForDubbo.java b/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/SaTokenSecondContextCreatorForDubbo.java
deleted file mode 100644
index 2ff91e4d..00000000
--- a/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/SaTokenSecondContextCreatorForDubbo.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.context.dubbo;
-
-import cn.dev33.satoken.context.second.SaTokenSecondContext;
-import cn.dev33.satoken.context.second.SaTokenSecondContextCreator;
-
-/**
- * Sa-Token 二级上下文 - 创建器 [ Dubbo版 ]
- *
- * @author click33
- * @since 1.34.0
- */
-public class SaTokenSecondContextCreatorForDubbo implements SaTokenSecondContextCreator {
-
- @Override
- public SaTokenSecondContext create() {
- return new SaTokenSecondContextForDubbo();
- }
-
-}
diff --git a/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboConsumerFilter.java b/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboConsumerFilter.java
index 702372b7..1faab139 100644
--- a/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboConsumerFilter.java
+++ b/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboConsumerFilter.java
@@ -15,20 +15,14 @@
*/
package cn.dev33.satoken.context.dubbo.filter;
-import org.apache.dubbo.common.constants.CommonConstants;
-import org.apache.dubbo.common.extension.Activate;
-import org.apache.dubbo.rpc.Filter;
-import org.apache.dubbo.rpc.Invocation;
-import org.apache.dubbo.rpc.Invoker;
-import org.apache.dubbo.rpc.Result;
-import org.apache.dubbo.rpc.RpcContext;
-import org.apache.dubbo.rpc.RpcException;
-
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.context.SaTokenContextDefaultImpl;
import cn.dev33.satoken.same.SaSameUtil;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaTokenConsts;
+import org.apache.dubbo.common.constants.CommonConstants;
+import org.apache.dubbo.common.extension.Activate;
+import org.apache.dubbo.rpc.*;
/**
* Sa-Token 整合 Dubbo Consumer 端(调用端)过滤器
@@ -36,7 +30,7 @@ import cn.dev33.satoken.util.SaTokenConsts;
* @author click33
* @since 1.34.0
*/
-@Activate(group = {CommonConstants.CONSUMER}, order = -30000)
+@Activate(group = {CommonConstants.CONSUMER}, order = SaTokenConsts.RPC_PERMISSION_FILTER_ORDER)
public class SaTokenDubboConsumerFilter implements Filter {
@Override
diff --git a/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboContextFilter.java b/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboContextFilter.java
new file mode 100644
index 00000000..3bc328f0
--- /dev/null
+++ b/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboContextFilter.java
@@ -0,0 +1,44 @@
+/*
+ * 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.context.dubbo.filter;
+
+import cn.dev33.satoken.SaManager;
+import cn.dev33.satoken.context.dubbo.util.SaDubboContextUtil;
+import cn.dev33.satoken.util.SaTokenConsts;
+import org.apache.dubbo.common.constants.CommonConstants;
+import org.apache.dubbo.common.extension.Activate;
+import org.apache.dubbo.rpc.*;
+
+/**
+ * Sa-Token 整合 Dubbo 上下文初始化过滤器
+ *
+ * @author click33
+ * @since 1.42.0
+ */
+@Activate(group = {CommonConstants.PROVIDER}, order = SaTokenConsts.RPC_CONTEXT_FILTER_ORDER)
+public class SaTokenDubboContextFilter implements Filter {
+
+ @Override
+ public Result invoke(Invoker> invoker, Invocation invocation) {
+ try {
+ SaDubboContextUtil.setContext(RpcContext.getContext());
+ return invoker.invoke(invocation);
+ } finally {
+ SaManager.getSaTokenContext().clearContext();
+ }
+ }
+
+}
diff --git a/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboProviderFilter.java b/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboProviderFilter.java
index ba25089c..dd615c2a 100644
--- a/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboProviderFilter.java
+++ b/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboProviderFilter.java
@@ -15,16 +15,15 @@
*/
package cn.dev33.satoken.context.dubbo.filter;
+import cn.dev33.satoken.SaManager;
+import cn.dev33.satoken.same.SaSameUtil;
+import cn.dev33.satoken.util.SaTokenConsts;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.Filter;
import org.apache.dubbo.rpc.Invocation;
import org.apache.dubbo.rpc.Invoker;
import org.apache.dubbo.rpc.Result;
-import org.apache.dubbo.rpc.RpcException;
-
-import cn.dev33.satoken.SaManager;
-import cn.dev33.satoken.same.SaSameUtil;
/**
* Sa-Token 整合 Dubbo Provider端(被调用端)过滤器
@@ -32,12 +31,11 @@ import cn.dev33.satoken.same.SaSameUtil;
* @author click33
* @since 1.34.0
*/
-@Activate(group = {CommonConstants.PROVIDER}, order = -30000)
+@Activate(group = {CommonConstants.PROVIDER}, order = SaTokenConsts.RPC_PERMISSION_FILTER_ORDER)
public class SaTokenDubboProviderFilter implements Filter {
@Override
- public Result invoke(Invoker> invoker, Invocation invocation) throws RpcException {
-
+ public Result invoke(Invoker> invoker, Invocation invocation) {
// RPC 调用鉴权
if(SaManager.getConfig().getCheckSameToken()) {
String idToken = invocation.getAttachment(SaSameUtil.SAME_TOKEN);
diff --git a/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/SaTokenSecondContextForDubbo.java b/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/util/SaDubboContextUtil.java
similarity index 58%
rename from sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/SaTokenSecondContextForDubbo.java
rename to sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/util/SaDubboContextUtil.java
index 90c6dee0..935470d0 100644
--- a/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/SaTokenSecondContextForDubbo.java
+++ b/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/util/SaDubboContextUtil.java
@@ -13,43 +13,42 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package cn.dev33.satoken.context.dubbo;
+package cn.dev33.satoken.context.dubbo.util;
+import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.context.dubbo.model.SaRequestForDubbo;
import cn.dev33.satoken.context.dubbo.model.SaResponseForDubbo;
import cn.dev33.satoken.context.dubbo.model.SaStorageForDubbo;
import cn.dev33.satoken.context.model.SaRequest;
import cn.dev33.satoken.context.model.SaResponse;
import cn.dev33.satoken.context.model.SaStorage;
-import cn.dev33.satoken.context.second.SaTokenSecondContext;
import org.apache.dubbo.rpc.RpcContext;
+
/**
- * Sa-Token 二级上下文 [ Dubbo版本 ]
- *
+ * SaTokenContext 上下文读写工具类
+ *
* @author click33
- * @since 1.34.0
+ * @since 1.42.0
*/
-public class SaTokenSecondContextForDubbo implements SaTokenSecondContext {
+public class SaDubboContextUtil {
- @Override
- public SaRequest getRequest() {
- return new SaRequestForDubbo(RpcContext.getContext());
+ /**
+ * 写入当前上下文
+ * @param rpcContext /
+ */
+ public static void setContext(RpcContext rpcContext) {
+ SaRequest saRequest = new SaRequestForDubbo(RpcContext.getContext());
+ SaResponse saResponse = new SaResponseForDubbo(RpcContext.getContext());
+ SaStorage saStorage = new SaStorageForDubbo(RpcContext.getContext());
+ SaManager.getSaTokenContext().setContext(saRequest, saResponse, saStorage);
}
- @Override
- public SaResponse getResponse() {
- return new SaResponseForDubbo(RpcContext.getContext());
+ /**
+ * 清除当前上下文
+ */
+ public static void clearContext() {
+ SaManager.getSaTokenContext().clearContext();
}
- @Override
- public SaStorage getStorage() {
- return new SaStorageForDubbo(RpcContext.getContext());
- }
-
- @Override
- public boolean isValid() {
- return RpcContext.getContext() != null;
- }
-
}
diff --git a/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginForDubbo.java b/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginForDubbo.java
deleted file mode 100644
index 3484819f..00000000
--- a/sa-token-plugin/sa-token-dubbo/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginForDubbo.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.plugin;
-
-import cn.dev33.satoken.SaManager;
-import cn.dev33.satoken.context.dubbo.SaTokenSecondContextForDubbo;
-
-/**
- * SaToken 插件安装:二级上下文 (dubbo 版)
- *
- * @author click33
- * @since 1.41.0
- */
-public class SaTokenPluginForDubbo implements SaTokenPlugin {
-
- @Override
- public void install() {
- SaManager.setSaTokenSecondContext(new SaTokenSecondContextForDubbo());
- }
-
-}
\ No newline at end of file
diff --git a/sa-token-plugin/sa-token-dubbo/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter b/sa-token-plugin/sa-token-dubbo/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter
index c7b1d87e..6ab6247d 100644
--- a/sa-token-plugin/sa-token-dubbo/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter
+++ b/sa-token-plugin/sa-token-dubbo/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter
@@ -1,2 +1,3 @@
saTokenDubboConsumerFilter=cn.dev33.satoken.context.dubbo.filter.SaTokenDubboConsumerFilter
-saTokenDubboProviderFilter=cn.dev33.satoken.context.dubbo.filter.SaTokenDubboProviderFilter
\ No newline at end of file
+saTokenDubboProviderFilter=cn.dev33.satoken.context.dubbo.filter.SaTokenDubboProviderFilter
+saTokenDubboContextFilter=cn.dev33.satoken.context.dubbo.filter.SaTokenDubboContextFilter
\ No newline at end of file
diff --git a/sa-token-plugin/sa-token-dubbo/src/main/resources/META-INF/satoken/cn.dev33.satoken.plugin.SaTokenPlugin b/sa-token-plugin/sa-token-dubbo/src/main/resources/META-INF/satoken/cn.dev33.satoken.plugin.SaTokenPlugin
deleted file mode 100644
index bb334d83..00000000
--- a/sa-token-plugin/sa-token-dubbo/src/main/resources/META-INF/satoken/cn.dev33.satoken.plugin.SaTokenPlugin
+++ /dev/null
@@ -1 +0,0 @@
-cn.dev33.satoken.plugin.SaTokenPluginForDubbo
\ No newline at end of file
diff --git a/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ConsumerFilter.java b/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ConsumerFilter.java
index 83dce1ac..36fa8ced 100644
--- a/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ConsumerFilter.java
+++ b/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ConsumerFilter.java
@@ -30,11 +30,11 @@ import org.apache.dubbo.rpc.*;
* @author click33
* @since 1.34.0
*/
-@Activate(group = {CommonConstants.CONSUMER}, order = -30000)
+@Activate(group = {CommonConstants.CONSUMER}, order = SaTokenConsts.RPC_PERMISSION_FILTER_ORDER)
public class SaTokenDubbo3ConsumerFilter implements Filter {
@Override
- public Result invoke(Invoker> invoker, Invocation invocation) throws RpcException {
+ public Result invoke(Invoker> invoker, Invocation invocation) {
// 追加 Same-Token 参数
if(SaManager.getConfig().getCheckSameToken()) {
diff --git a/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ContextFilter.java b/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ContextFilter.java
new file mode 100644
index 00000000..41651b38
--- /dev/null
+++ b/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ContextFilter.java
@@ -0,0 +1,44 @@
+/*
+ * 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.context.dubbo3.filter;
+
+import cn.dev33.satoken.SaManager;
+import cn.dev33.satoken.context.dubbo3.util.SaDubbo3ContextUtil;
+import cn.dev33.satoken.util.SaTokenConsts;
+import org.apache.dubbo.common.constants.CommonConstants;
+import org.apache.dubbo.common.extension.Activate;
+import org.apache.dubbo.rpc.*;
+
+/**
+ * Sa-Token 整合 Dubbo3 上下文初始化过滤器
+ *
+ * @author click33
+ * @since 1.42.0
+ */
+@Activate(group = {CommonConstants.PROVIDER}, order = SaTokenConsts.RPC_CONTEXT_FILTER_ORDER)
+public class SaTokenDubbo3ContextFilter implements Filter {
+
+ @Override
+ public Result invoke(Invoker> invoker, Invocation invocation) {
+ try {
+ SaDubbo3ContextUtil.setContext(RpcContext.getServiceContext());
+ return invoker.invoke(invocation);
+ } finally {
+ SaManager.getSaTokenContext().clearContext();
+ }
+ }
+
+}
diff --git a/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ProviderFilter.java b/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ProviderFilter.java
index fefbde12..8057e06b 100644
--- a/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ProviderFilter.java
+++ b/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ProviderFilter.java
@@ -17,9 +17,13 @@ package cn.dev33.satoken.context.dubbo3.filter;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.same.SaSameUtil;
+import cn.dev33.satoken.util.SaTokenConsts;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
-import org.apache.dubbo.rpc.*;
+import org.apache.dubbo.rpc.Filter;
+import org.apache.dubbo.rpc.Invocation;
+import org.apache.dubbo.rpc.Invoker;
+import org.apache.dubbo.rpc.Result;
/**
* Sa-Token 整合 Dubbo3 Provider端(被调用端)过滤器
@@ -27,11 +31,11 @@ import org.apache.dubbo.rpc.*;
* @author click33
* @since 1.34.0
*/
-@Activate(group = {CommonConstants.PROVIDER}, order = -30000)
+@Activate(group = {CommonConstants.PROVIDER}, order = SaTokenConsts.RPC_PERMISSION_FILTER_ORDER)
public class SaTokenDubbo3ProviderFilter implements Filter {
@Override
- public Result invoke(Invoker> invoker, Invocation invocation) throws RpcException {
+ public Result invoke(Invoker> invoker, Invocation invocation) {
// RPC 调用鉴权
if(SaManager.getConfig().getCheckSameToken()) {
diff --git a/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/SaTokenSecondContextForDubbo3.java b/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/util/SaDubbo3ContextUtil.java
similarity index 58%
rename from sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/SaTokenSecondContextForDubbo3.java
rename to sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/util/SaDubbo3ContextUtil.java
index d05ace84..2f25d2a6 100644
--- a/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/SaTokenSecondContextForDubbo3.java
+++ b/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/context/dubbo3/util/SaDubbo3ContextUtil.java
@@ -13,43 +13,42 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package cn.dev33.satoken.context.dubbo3;
+package cn.dev33.satoken.context.dubbo3.util;
+import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.context.dubbo3.model.SaRequestForDubbo3;
import cn.dev33.satoken.context.dubbo3.model.SaResponseForDubbo3;
import cn.dev33.satoken.context.dubbo3.model.SaStorageForDubbo3;
import cn.dev33.satoken.context.model.SaRequest;
import cn.dev33.satoken.context.model.SaResponse;
import cn.dev33.satoken.context.model.SaStorage;
-import cn.dev33.satoken.context.second.SaTokenSecondContext;
import org.apache.dubbo.rpc.RpcContext;
+
/**
- * Sa-Token 二级上下文 [ Dubbo3版本 ]
- *
+ * SaTokenContext 上下文读写工具类
+ *
* @author click33
- * @since 1.34.0
+ * @since 1.42.0
*/
-public class SaTokenSecondContextForDubbo3 implements SaTokenSecondContext {
+public class SaDubbo3ContextUtil {
- @Override
- public SaRequest getRequest() {
- return new SaRequestForDubbo3(RpcContext.getServiceContext());
+ /**
+ * 写入当前上下文
+ * @param rpcContext /
+ */
+ public static void setContext(RpcContext rpcContext) {
+ SaRequest saRequest = new SaRequestForDubbo3(RpcContext.getServiceContext());
+ SaResponse saResponse = new SaResponseForDubbo3(RpcContext.getServiceContext());
+ SaStorage saStorage = new SaStorageForDubbo3(RpcContext.getServiceContext());
+ SaManager.getSaTokenContext().setContext(saRequest, saResponse, saStorage);
}
- @Override
- public SaResponse getResponse() {
- return new SaResponseForDubbo3(RpcContext.getServiceContext());
+ /**
+ * 清除当前上下文
+ */
+ public static void clearContext() {
+ SaManager.getSaTokenContext().clearContext();
}
- @Override
- public SaStorage getStorage() {
- return new SaStorageForDubbo3(RpcContext.getServiceContext());
- }
-
- @Override
- public boolean isValid() {
- return RpcContext.getServiceContext() != null;
- }
-
}
diff --git a/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginForDubbo3.java b/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginForDubbo3.java
deleted file mode 100644
index 201d552b..00000000
--- a/sa-token-plugin/sa-token-dubbo3/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginForDubbo3.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.plugin;
-
-import cn.dev33.satoken.SaManager;
-import cn.dev33.satoken.context.dubbo3.SaTokenSecondContextForDubbo3;
-
-/**
- * SaToken 插件安装:二级上下文 (dubbo3 版)
- *
- * @author click33
- * @since 1.41.0
- */
-public class SaTokenPluginForDubbo3 implements SaTokenPlugin {
-
- @Override
- public void install() {
- SaManager.setSaTokenSecondContext(new SaTokenSecondContextForDubbo3());
- }
-
-}
\ No newline at end of file
diff --git a/sa-token-plugin/sa-token-dubbo3/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter b/sa-token-plugin/sa-token-dubbo3/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter
index 739e5457..aed4501f 100644
--- a/sa-token-plugin/sa-token-dubbo3/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter
+++ b/sa-token-plugin/sa-token-dubbo3/src/main/resources/META-INF/dubbo/org.apache.dubbo.rpc.Filter
@@ -1,2 +1,3 @@
saTokenDubbo3ConsumerFilter=cn.dev33.satoken.context.dubbo3.filter.SaTokenDubbo3ConsumerFilter
-saTokenDubbo3ProviderFilter=cn.dev33.satoken.context.dubbo3.filter.SaTokenDubbo3ProviderFilter
\ No newline at end of file
+saTokenDubbo3ProviderFilter=cn.dev33.satoken.context.dubbo3.filter.SaTokenDubbo3ProviderFilter
+saTokenDubbo3ContextFilter=cn.dev33.satoken.context.dubbo3.filter.SaTokenDubbo3ContextFilter
\ No newline at end of file
diff --git a/sa-token-plugin/sa-token-dubbo3/src/main/resources/META-INF/satoken/cn.dev33.satoken.plugin.SaTokenPlugin b/sa-token-plugin/sa-token-dubbo3/src/main/resources/META-INF/satoken/cn.dev33.satoken.plugin.SaTokenPlugin
deleted file mode 100644
index 65def9b6..00000000
--- a/sa-token-plugin/sa-token-dubbo3/src/main/resources/META-INF/satoken/cn.dev33.satoken.plugin.SaTokenPlugin
+++ /dev/null
@@ -1 +0,0 @@
-cn.dev33.satoken.plugin.SaTokenPluginForDubbo3
\ No newline at end of file
diff --git a/sa-token-plugin/sa-token-grpc/src/main/java/cn/dev33/satoken/context/grpc/SaTokenSecondContextCreatorForGrpc.java b/sa-token-plugin/sa-token-grpc/src/main/java/cn/dev33/satoken/context/grpc/SaTokenSecondContextCreatorForGrpc.java
deleted file mode 100644
index bf79f5d2..00000000
--- a/sa-token-plugin/sa-token-grpc/src/main/java/cn/dev33/satoken/context/grpc/SaTokenSecondContextCreatorForGrpc.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.context.grpc;
-
-import cn.dev33.satoken.context.second.SaTokenSecondContext;
-import cn.dev33.satoken.context.second.SaTokenSecondContextCreator;
-import org.springframework.stereotype.Component;
-
-/**
- * Sa-Token 二级Context - 创建器 [Grpc版]
- *
- * @author lym
- * @since 1.34.0
- */
-@Component
-public class SaTokenSecondContextCreatorForGrpc implements SaTokenSecondContextCreator {
-
- @Override
- public SaTokenSecondContext create() {
- return new SaTokenSecondContextForGrpc();
- }
-
-}
diff --git a/sa-token-plugin/sa-token-grpc/src/main/java/cn/dev33/satoken/context/grpc/interceptor/SaTokenGrpcServerInterceptor.java b/sa-token-plugin/sa-token-grpc/src/main/java/cn/dev33/satoken/context/grpc/interceptor/SaTokenGrpcServerInterceptor.java
index a21cfc10..1d6da197 100644
--- a/sa-token-plugin/sa-token-grpc/src/main/java/cn/dev33/satoken/context/grpc/interceptor/SaTokenGrpcServerInterceptor.java
+++ b/sa-token-plugin/sa-token-grpc/src/main/java/cn/dev33/satoken/context/grpc/interceptor/SaTokenGrpcServerInterceptor.java
@@ -17,15 +17,11 @@ package cn.dev33.satoken.context.grpc.interceptor;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.context.grpc.constants.GrpcContextConstants;
+import cn.dev33.satoken.context.grpc.util.SaGrpcContextUtil;
import cn.dev33.satoken.same.SaSameUtil;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaFoxUtil;
-import io.grpc.ForwardingServerCall;
-import io.grpc.Metadata;
-import io.grpc.ServerCall;
-import io.grpc.ServerCallHandler;
-import io.grpc.ServerInterceptor;
-import io.grpc.Status;
+import io.grpc.*;
import net.devh.boot.grpc.server.interceptor.GrpcGlobalServerInterceptor;
/**
@@ -38,26 +34,34 @@ import net.devh.boot.grpc.server.interceptor.GrpcGlobalServerInterceptor;
public class SaTokenGrpcServerInterceptor implements ServerInterceptor {
@Override
public