From 1a34da9625444d9da6b10248a9276918dc98e772 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?=
<15040126243@163.com>
Date: Thu, 24 Feb 2022 20:53:45 +0800
Subject: [PATCH] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E8=A7=A3=E5=86=B3du?=
=?UTF-8?q?bbo=E8=8E=B7=E5=8F=96=E5=85=83=E6=95=B0=E6=8D=AEsatoken?=
=?UTF-8?q?=E4=BC=98=E5=85=88=E7=BA=A7=E8=BF=87=E4=BD=8E=20=E5=86=85?=
=?UTF-8?q?=E7=BD=91=E9=89=B4=E6=9D=83=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-common/ruoyi-common-dubbo/pom.xml | 6 +++
.../filter/SaTokenDubboConsumerFilter.java | 51 +++++++++++++++++++
.../filter/SaTokenDubboProviderFilter.java | 38 ++++++++++++++
3 files changed, 95 insertions(+)
create mode 100644 ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboConsumerFilter.java
create mode 100644 ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboProviderFilter.java
diff --git a/ruoyi-common/ruoyi-common-dubbo/pom.xml b/ruoyi-common/ruoyi-common-dubbo/pom.xml
index 028873e0..97fcf9f6 100644
--- a/ruoyi-common/ruoyi-common-dubbo/pom.xml
+++ b/ruoyi-common/ruoyi-common-dubbo/pom.xml
@@ -47,6 +47,12 @@
lombok
+
+ cn.dev33
+ sa-token-spring-boot-starter
+ ${satoken.version}
+
+
cn.dev33
diff --git a/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboConsumerFilter.java b/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboConsumerFilter.java
new file mode 100644
index 00000000..3eb58625
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboConsumerFilter.java
@@ -0,0 +1,51 @@
+package cn.dev33.satoken.context.dubbo.filter;
+
+import cn.dev33.satoken.SaManager;
+import cn.dev33.satoken.context.SaTokenContextDefaultImpl;
+import cn.dev33.satoken.id.SaIdUtil;
+import cn.dev33.satoken.spring.SaBeanInject;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.util.SaTokenConsts;
+import com.ruoyi.common.core.utils.SpringUtils;
+import org.apache.dubbo.common.constants.CommonConstants;
+import org.apache.dubbo.common.extension.Activate;
+import org.apache.dubbo.rpc.*;
+
+/**
+ *
+ * Sa-Token 整合 Dubbo Consumer端过滤器
+ *
+ * 此过滤器为覆盖 Sa-Token 包内过滤器
+ *
+ * @author kong
+ *
+ */
+@Activate(group = {CommonConstants.CONSUMER}, order = Integer.MIN_VALUE)
+public class SaTokenDubboConsumerFilter implements Filter {
+
+ @Override
+ public Result invoke(Invoker> invoker, Invocation invocation) throws RpcException {
+ // 强制初始化 Sa-Token 相关配置 解决内网鉴权元数据加载报错问题
+ SpringUtils.getBean(SaBeanInject.class);
+
+ // 追加 Id-Token 参数
+ if(SaManager.getConfig().getCheckIdToken()) {
+ RpcContext.getContext().setAttachment(SaIdUtil.ID_TOKEN, SaIdUtil.getToken());
+ }
+
+ // 1. 调用前,向下传递会话Token
+ if(SaManager.getSaTokenContextOrSecond() != SaTokenContextDefaultImpl.defaultContext) {
+ RpcContext.getContext().setAttachment(SaTokenConsts.JUST_CREATED, StpUtil.getTokenValueNotCut());
+ }
+
+ // 2. 开始调用
+ Result invoke = invoker.invoke(invocation);
+
+ // 3. 调用后,解析回传的Token值
+ StpUtil.setTokenValue(invoke.getAttachment(SaTokenConsts.JUST_CREATED_NOT_PREFIX));
+
+ // note
+ return invoke;
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboProviderFilter.java b/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboProviderFilter.java
new file mode 100644
index 00000000..1a3b3346
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo/filter/SaTokenDubboProviderFilter.java
@@ -0,0 +1,38 @@
+package cn.dev33.satoken.context.dubbo.filter;
+
+import cn.dev33.satoken.SaManager;
+import cn.dev33.satoken.id.SaIdUtil;
+import cn.dev33.satoken.spring.SaBeanInject;
+import com.ruoyi.common.core.utils.SpringUtils;
+import org.apache.dubbo.common.constants.CommonConstants;
+import org.apache.dubbo.common.extension.Activate;
+import org.apache.dubbo.rpc.*;
+
+/**
+ *
+ * Sa-Token 整合 Dubbo Provider端过滤器
+ *
+ * 此过滤器为覆盖 Sa-Token 包内过滤器
+ *
+ * @author kong
+ *
+ */
+@Activate(group = {CommonConstants.PROVIDER}, order = Integer.MIN_VALUE)
+public class SaTokenDubboProviderFilter implements Filter {
+
+ @Override
+ public Result invoke(Invoker> invoker, Invocation invocation) throws RpcException {
+ // 强制初始化 Sa-Token 相关配置 解决内网鉴权元数据加载报错问题
+ SpringUtils.getBean(SaBeanInject.class);
+
+ // RPC 调用鉴权
+ if(SaManager.getConfig().getCheckIdToken()) {
+ String idToken = invocation.getAttachment(SaIdUtil.ID_TOKEN);
+ SaIdUtil.checkToken(idToken);
+ }
+
+ // 开始调用
+ return invoker.invoke(invocation);
+ }
+
+}