mirror of
https://gitee.com/dromara/RuoYi-Cloud-Plus.git
synced 2025-10-15 14:40:25 +00:00
fix 修复 优化dubbo调用跟satoken无关的场景会报错无上下文问题
This commit is contained in:
@@ -1,8 +1,6 @@
|
|||||||
package org.dromara.auth.controller;
|
package org.dromara.auth.controller;
|
||||||
|
|
||||||
import cn.dev33.satoken.context.mock.SaTokenContextMockUtil;
|
|
||||||
import cn.dev33.satoken.exception.NotLoginException;
|
import cn.dev33.satoken.exception.NotLoginException;
|
||||||
import cn.dev33.satoken.stp.StpUtil;
|
|
||||||
import cn.hutool.core.codec.Base64;
|
import cn.hutool.core.codec.Base64;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
@@ -104,11 +102,8 @@ public class TokenController {
|
|||||||
|
|
||||||
Long userId = LoginHelper.getUserId();
|
Long userId = LoginHelper.getUserId();
|
||||||
scheduledExecutorService.schedule(() -> {
|
scheduledExecutorService.schedule(() -> {
|
||||||
SaTokenContextMockUtil.setMockContext(() -> {
|
remoteMessageService.publishMessage(List.of(userId), "欢迎登录RuoYi-Cloud-Plus微服务管理系统");
|
||||||
StpUtil.setTokenValueToStorage(loginVo.getAccessToken());
|
}, 5, TimeUnit.SECONDS);
|
||||||
remoteMessageService.publishMessage(List.of(userId), "欢迎登录RuoYi-Cloud-Plus微服务管理系统");
|
|
||||||
});
|
|
||||||
}, 3, TimeUnit.SECONDS);
|
|
||||||
return R.ok(loginVo);
|
return R.ok(loginVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* 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.SaHolder;
|
||||||
|
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 整合 Dubbo3 Consumer 端(调用端)过滤器
|
||||||
|
*
|
||||||
|
* @author click33
|
||||||
|
* @since 1.34.0
|
||||||
|
*/
|
||||||
|
@Activate(group = {CommonConstants.CONSUMER}, order = SaTokenConsts.RPC_PERMISSION_FILTER_ORDER)
|
||||||
|
public class SaTokenDubbo3ConsumerFilter implements Filter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result invoke(Invoker<?> invoker, Invocation invocation) {
|
||||||
|
|
||||||
|
// 追加 Same-Token 参数
|
||||||
|
if(SaManager.getConfig().getCheckSameToken()) {
|
||||||
|
RpcContext.getServiceContext().setAttachment(SaSameUtil.SAME_TOKEN,SaSameUtil.getToken());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 无上下文直接跳过下面流程
|
||||||
|
if (!SaHolder.getContext().isValid()) {
|
||||||
|
return invoker.invoke(invocation);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. 调用前,向下传递会话Token
|
||||||
|
if(SaManager.getSaTokenContext() != SaTokenContextDefaultImpl.defaultContext) {
|
||||||
|
RpcContext.getServiceContext().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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -34,7 +34,7 @@ public class SaTokenDubbo3ContextFilter implements Filter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result invoke(Invoker<?> invoker, Invocation invocation) {
|
public Result invoke(Invoker<?> invoker, Invocation invocation) {
|
||||||
if(SaHolder.getContext().isValid()) {
|
if (SaHolder.getContext().isValid()) {
|
||||||
return invoker.invoke(invocation);
|
return invoker.invoke(invocation);
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
|
@@ -87,11 +87,14 @@ public class DataPermissionHelper {
|
|||||||
* @throws NullPointerException 如果数据权限上下文类型异常,则抛出NullPointerException
|
* @throws NullPointerException 如果数据权限上下文类型异常,则抛出NullPointerException
|
||||||
*/
|
*/
|
||||||
public static Map<String, Object> getContext() {
|
public static Map<String, Object> getContext() {
|
||||||
SaStorage saStorage = SaHolder.getStorage();
|
Object attribute = new HashMap<>();
|
||||||
Object attribute = saStorage.get(DATA_PERMISSION_KEY);
|
if (SaHolder.getContext().isValid()) {
|
||||||
if (ObjectUtil.isNull(attribute)) {
|
SaStorage saStorage = SaHolder.getStorage();
|
||||||
saStorage.set(DATA_PERMISSION_KEY, new HashMap<>());
|
|
||||||
attribute = saStorage.get(DATA_PERMISSION_KEY);
|
attribute = saStorage.get(DATA_PERMISSION_KEY);
|
||||||
|
if (ObjectUtil.isNull(attribute)) {
|
||||||
|
saStorage.set(DATA_PERMISSION_KEY, new HashMap<>());
|
||||||
|
attribute = saStorage.get(DATA_PERMISSION_KEY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (attribute instanceof Map map) {
|
if (attribute instanceof Map map) {
|
||||||
return map;
|
return map;
|
||||||
|
Reference in New Issue
Block a user