欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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白名单

第三步:

<dubbo:provider filter="authProviderFilter"/>