dubbo白名单
程序员文章站
2022-03-03 10:20:59
...
dubbo白名单实现:
1、创建过滤器,实现 com.alibaba.dubbo.rpc.Filter 接口
2、resources目录下创建META-INF\dubbo目录,新建com.alibaba.dubbo.rpc.Filter名称的文件。
3、dubbo-provider.xml中 新增 <dubbo:provider filter="xxFilter"/>
具体实现:
1、第一步:
package com;
import com.alibaba.dubbo.rpc.*;
import lombok.extern.slf4j.Slf4j;
/**
* @author: han*
* @Date: 2019/12/6
* @Description: dubbo 鉴权
*/
@Slf4j
public class AuthProviderFilter implements Filter {
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
try {
String runEnv = System.getProperty("spring.profiles.active");
boolean isRun = runEnv.startsWith("run")||runEnv.startsWith("uat");
//非生产和uat无需dubbo权限校验
if (!isRun){
return invoker.invoke(invocation);
}
//白名单
String dubboAuthWhiteIps = SysConfigUtils.getConfigValue("dubboAuthWhiteIps");
//远程访问主机
String remoteAddress = RpcContext.getContext().getRemoteAddressString();
String remoteIp = remoteAddress.split(":")[0];
// 获取调用的接口名
String reqFacade = invoker.getInterface().getSimpleName();
if (dubboAuthWhiteIps == null) {
log.warn("请配置dubbo权限!");
}
//有权限访问
if (dubboAuthWhiteIps == null || dubboAuthWhiteIps.contains(remoteIp)) {
return invoker.invoke(invocation);
} else {
//无权限访问
String errorDetail = "主机:" + remoteAddress + ",无权访问接口:" + reqFacade + ",方法:" + invocation.getMethodName() + ",请联系管理员添加。";
log.warn(errorDetail);
RpcResult rpcResult = new RpcResult(errorDetail);
return rpcResult;
}
} catch (Exception e) {
log.error("dubbo权限校验异常:", e);
return null;
}
}
}
第二步:
authProviderFilter=com.bsgn.sscf.config.AuthProviderFilter
第三步:
<dubbo:provider filter="authProviderFilter"/>
上一篇: 添加白名单
下一篇: Python语言-NL-5‰和1%的力量