初始代码
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
package com.yunzhupaas.filter;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.dubbo.common.constants.CommonConstants;
|
||||
import org.apache.dubbo.common.extension.Activate;
|
||||
import org.apache.dubbo.rpc.*;
|
||||
|
||||
/**
|
||||
* Dubbo请求过滤器
|
||||
*/
|
||||
@Slf4j
|
||||
@Activate(group = { CommonConstants.PROVIDER, CommonConstants.CONSUMER }, order = 100)
|
||||
public class MyDubboRequestFilter implements Filter {
|
||||
|
||||
@Override
|
||||
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
|
||||
Result result;
|
||||
// Provider端记录日志
|
||||
if (RpcContext.getContext().isProviderSide()) {
|
||||
long startTime = System.currentTimeMillis();
|
||||
result = invoker.invoke(invocation);
|
||||
long elapsed = System.currentTimeMillis() - startTime;
|
||||
|
||||
String baselog = "Client[" + CommonConstants.PROVIDER + "],InterfaceName=["
|
||||
+ invocation.getInvoker().getInterface().getSimpleName() + "],MethodName=["
|
||||
+ invocation.getMethodName() + "]";
|
||||
if (result.hasException()) {
|
||||
log.error("DUBBO - 处理异常: {}, Exception = {}", baselog, result.getException());
|
||||
} else {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("DUBBO - 服务响应: {}, Elapsed=[{}ms]", baselog, elapsed);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
result = invoker.invoke(invocation);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package com.yunzhupaas.filter;
|
||||
|
||||
import cn.dev33.satoken.same.SaSameUtil;
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
import com.yunzhupaas.base.UserInfo;
|
||||
import com.yunzhupaas.consts.AuthConsts;
|
||||
import com.yunzhupaas.properties.SecurityProperties;
|
||||
import com.yunzhupaas.util.Constants;
|
||||
import com.yunzhupaas.util.UserProvider;
|
||||
import org.apache.dubbo.common.constants.CommonConstants;
|
||||
import org.apache.dubbo.common.extension.Activate;
|
||||
import org.apache.dubbo.rpc.*;
|
||||
|
||||
/**
|
||||
* Dubbo过滤器 自动传递装载UserInfo
|
||||
*/
|
||||
@Activate(group = { CommonConstants.PROVIDER, CommonConstants.CONSUMER }, order = 101)
|
||||
public class MyDubboTokenFilter implements Filter {
|
||||
|
||||
private static SecurityProperties securityProperties;
|
||||
|
||||
public MyDubboTokenFilter() {
|
||||
MyDubboTokenFilter.securityProperties = SpringUtil.getBean(SecurityProperties.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
|
||||
UserInfo userInfo;
|
||||
Result result;
|
||||
boolean isProvider;
|
||||
String url = RpcContext.getContext().getUrl().toString();
|
||||
if (url.startsWith("injvm")) {
|
||||
isProvider = url.contains("side=provider");
|
||||
} else {
|
||||
isProvider = RpcContext.getContext().isProviderSide();
|
||||
}
|
||||
// Provider端
|
||||
if (isProvider) {
|
||||
try {
|
||||
// 设置本地认证信息
|
||||
userInfo = (UserInfo) RpcContext.getContext().getObjectAttachment(Constants.AUTHORIZATION);
|
||||
UserProvider.setLocalLoginUser(userInfo);
|
||||
if (securityProperties.isEnableInnerAuth()) {
|
||||
String innerToken = invocation.getAttachment(AuthConsts.INNER_TOKEN_KEY);
|
||||
SaSameUtil.checkToken(innerToken);
|
||||
}
|
||||
result = invoker.invoke(invocation);
|
||||
} finally {
|
||||
// 清除用户缓存
|
||||
UserProvider.clearLocalUser();
|
||||
}
|
||||
} else {
|
||||
// Consumer端
|
||||
// 传递UserInfo
|
||||
userInfo = UserProvider.getUser();
|
||||
if (userInfo.getUserId() != null) {
|
||||
invocation.setAttachment(Constants.AUTHORIZATION, userInfo);
|
||||
}
|
||||
if (securityProperties.isEnableInnerAuth()) {
|
||||
invocation.setAttachment(AuthConsts.INNER_TOKEN_KEY, UserProvider.getInnerAuthToken());
|
||||
}
|
||||
result = invoker.invoke(invocation);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
yunzhupaasDubboToken=com.yunzhupaas.filter.MyDubboTokenFilter
|
||||
yunzhupaasDubboRequest=com.yunzhupaas.filter.MyDubboRequestFilter
|
||||
@@ -0,0 +1,2 @@
|
||||
# security/serialize.allowlist
|
||||
com.yunzhupaas.base.UserInfo
|
||||
Reference in New Issue
Block a user