流程步骤
1、配置文件

在bootstrap.yml增加是否开启鉴权配置等操作

# 鉴权
magical:
  dubbo:
    auth:
      #是否开启Dubbo服务鉴权
      enabled: true
2、服务鉴权配置
@Data
@RefreshScope
@Component(DubboAuthProperties.BEAN_NAME)
@ConfigurationProperties(DubboAuthProperties.PREFIX)
public class DubboAuthProperties implements Serializable {
    public static final String PREFIX = "magical.dubbo.auth";
    public static final String BEAN_NAME = "dubboAuthProperties";
    private String token ;//dubbo服务token,防止非法服务访问消费者/提供者
    private Boolean enabled = Boolean.FALSE;
}
3、服务鉴权过滤器
@Activate(group = {Constants.PROVIDER})
public class DubboProviderAuthFilter implements Filter {
    ExtensionFactory objectFactory =
            ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAdaptiveExtension();

    private final DubboAuthProperties dubboAuthProperties
            = objectFactory.getExtension(DubboAuthProperties.class, DubboAuthProperties.BEAN_NAME);

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        if (dubboAuthProperties.getEnabled()) {
//            RpcContext.getContext().setAttachment("token","lss0555"); //隐式配置token
            String token = RpcContext.getContext().getAttachment("token");
            System.out.println("token:"+token);
            //对dubbo服务进行鉴权
            if (null != token && token.equals("lss0555")) {
                return invoker.invoke(invocation);
            } else {
                System.out.println("[DUBBO] Provider 接口鉴权失败,无法提供服务!");
                throw new RpcException(" [DUBBO] Provider 接口鉴权失败,无法提供服务!");
            }
        }else {
            System.out.println(invocation.getInvoker().getInterface().getName());
            return invoker.invoke(invocation);
        }
    }
}
4、过滤器配置

在resource文件夹下面增加目录META-INF.dubbo,增加文件 com.alibaba.dubbo.rpc.Filter,内容如下:

dubboAuthorityLogFilter=com.example.userprovider.filter.DubboProviderAuthFilter
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐