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); + } + +}