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