docs 补充Dubbo插件文档

This commit is contained in:
Uncarbon 2021-11-08 10:34:37 +08:00
parent 6b80afe806
commit 658284bed3

View File

@ -60,7 +60,7 @@ RPC 模式的调用,可以让我们像调用本地方法一样完成服务通
我们有两种方式完成整合。
##### 方式一、使用配置
##### 方式一、使用配置(推荐)
直接在 `application.yml` 配置即可:
@ -70,8 +70,14 @@ sa-token:
check-id-token: true
```
成功后, [ 被调用端 ] 可以自由使用 `StpUtil` 中的方法,如:
``` java
String appId = StpUtil.getSession().get("appId");
```
##### 方式二、自建 Dubbo 过滤器校验
> 适用于需要另外传递自定义附加数据( attachment )的情况
1、在 [ 调用端 ] 的 `\resources\META-INF\dubbo\` 目录新建 `org.apache.dubbo.rpc.Filter` 文件
``` html
@ -99,7 +105,9 @@ public class DubboConsumerFilter implements Filter {
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
// 追加 Id-Token 参数
RpcContext.getContext().setAttachment(SaIdUtil.ID_TOKEN, SaIdUtil.getToken());
RpcContext.getContext().setAttachment(SaIdUtil.ID_TOKEN, SaIdUtil.getToken());
// 如果有其他自定义附加数据,如租户
// RpcContext.getContext().setAttachment("tenantContext", tenantContextBO);
// 开始调用
return invoker.invoke(invocation);
@ -138,6 +146,9 @@ public class DubboProviderFilter implements Filter {
String idToken = invocation.getAttachment(SaIdUtil.ID_TOKEN);
SaIdUtil.checkToken(idToken);
// 取出其他自定义附加数据
// TenantContext tenantContext = invocation.getAttachment("tenantContext");
// 开始调用
return invoker.invoke(invocation);
}
@ -148,3 +159,12 @@ public class DubboProviderFilter implements Filter {
然后我们就可以进行安全的 RPC 调用了,不带有 Id-Token 参数的调用都会抛出异常,无法调用成功。
### 题外话
一定程度上来说这样使得Dubbo调用变成“有状态”了。若项目或团队风格有要求使用“无状态”的调用方式也未尝不可只是略显繁琐
``` java
// 取C端用户信用
appMemberDubboService.getCredit(UserContext currentUser, TenantContext tenantContext);
// 后台管理分页列表支付订单
paymentOrderDubboService.adminPage(UserContext currentUser, TenantContext tenantContext, PageParam pageParam, AdminPagePaymentOrderDTO dto);
```