`

dubbox增加过滤器功能(附代码)

 
阅读更多
在开发中,有时候需要限制访问的权限,黑名单就是一种方法。对于Java Web应用,Spring的拦截器可以拦截Web接口的调用;而对于dubbo接口,Spring的拦截器就不管用了。
dubbo提供了Filter扩展,可以通过自定义Filter来实现这个功能。本文通过一个事例来演示如何实现dubbo接口的IP黑名单。

package com.alibaba.dubbo.demo;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.dubbo.rpc.Filter;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcContext;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.RpcResult;

public class AuthorityFilter implements Filter {  
    private static final Logger LOGGER = LoggerFactory.getLogger(AuthorityFilter.class);  
  
    private IpBlackList ipBlackList=new IpBlackList();  
  
    //dubbo通过setter方式自动注入  
    public void setIpWhiteList(IpBlackList ipWhiteList) {  
        this.ipBlackList = ipWhiteList;  
    }  
  
    @Override  
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {  
        if (!ipBlackList.isEnabled()) {  
            LOGGER.debug("黑名单禁用");  
            return invoker.invoke(invocation);  
        }  
  
        String clientIp = RpcContext.getContext().getRemoteAddressString();  
        LOGGER.debug("访问ip为{}", clientIp);  
        List<String> allowedIps = ipBlackList.getAllowedIp();  
        if (!allowedIps.contains(clientIp)) {  
            return invoker.invoke(invocation);  
        } else {  
            return new RpcResult();  
        }  
    }  
} 


注意:只能通过setter方式来注入其他的bean,且不要标注注解!
dubbo自己会对这些bean进行注入,不需要再标注@Resource让Spring注入,参见扩展点加载

2配置文件
参考:调用拦截扩展
在resources目录下添加纯文本文件META-INF/dubbo/com.alibaba.dubbo.rpc.Filter,内容如下:
[plain] view plain copy
xxxFilter=com.xxx.AuthorityFilter
修改dubbo的provider配置文件,在dubbo:provider中添加配置的filter,如下:
[html] view plain copy
<dubbo:provider filter="xxxFilter" /> 

这样就可以实现dubbo接口的IP黑名单功能了。
分享到:
评论

相关推荐

    dubbox框架源码和使用实例

    此外,结合实际业务场景,学习如何利用 Dubbox 的扩展点实现定制化功能,如自定义过滤器、路由规则等。 总之,Dubbox 是一个强大的分布式服务框架,它为开发人员提供了构建大规模分布式系统的工具。通过深入学习和...

    dubbox 源码

    源码中对应的实现类如 `com.alibaba.dubbo负载均衡器负载均衡器负载均衡器负载均衡器负载均衡器负载均衡器负载均衡器负载均衡器负载均衡器负载均衡器负载均衡器负载均衡器负载均衡器负载均衡器负载均衡器负载均衡器...

    dubbox2.8.4

    Dubbo是阿里巴巴贡献的高性能、轻量级的服务治理框架,而dubbox则在其基础上添加了更多的特性与优化,为开发者提供了更强大的功能。 【描述】中提到的"根据当当源码打包成的dubbox"意味着这个压缩包包含了dubbox...

    dubbox + springmvc 2017整合最新版

    dubbox是阿里巴巴开源的一个基于Java的RPC框架,它在dubbo的基础上增加了更多的特性,如REST支持、Hessian2协议等。而Spring MVC则是Spring框架的一部分,专门用于构建Web应用程序,提供了模型-视图-控制器(MVC)...

    Dubbox源码及资源

    【Dubbox源码及资源】是一个关于Dubbo的扩展项目,它主要关注的是Dubbo的源代码分析和相关的学习资源。Dubbox是阿里巴巴开源的一款高性能、轻量级的服务框架,基于Java实现,广泛应用于分布式系统中。这个压缩包可能...

    Dubbox-master-2.8.4

    Dubbo 框架纯代码,不含其它已经编译过的源码,只要稍微懂一点点或者用过Dubbox框架的,应该都能够依葫芦画瓢,自己搭建一个pom控制关联的Dubbox框架,首先说明,这是纯环境代码,没有配置过其他Spring或者其他XML...

    Dubbox的详细配置和案例

    接着,下载dubbox-master源码,这包含了Dubbox的完整实现和示例代码。解压后,你可以在IDEA或Eclipse这样的集成开发环境中导入项目,进行编译和运行。 详细配置文档通常会涵盖以下几个方面: 1. **服务提供者配置*...

    dubbox2.8.4.rar

    Dubbox 是一个基于 Spring 和 Apache Dubbo 的微服务框架,由淘宝开源,旨在提供轻量级、高性能的服务治理方案。2.8.4 版本是 Dubbox 的一个稳定版本,可能包含了一些新特性、优化或者修复了已知的问题。由于在阿里...

    dubbox源代码

    Dubbox 的设计充分考虑了扩展性,通过 Filter 模式,用户可以方便地添加自定义的拦截器,实现诸如日志记录、性能监控、安全控制等功能。 10. **API 文档与工具支持** Dubbox 提供了生成 API 文档的工具,帮助...

    dubbox服务例子

    Dubbox 是一款基于阿里巴巴 Dubbo 框架的扩展,它增强了原生 Dubbo 的功能,使得在分布式服务环境中能够更高效地管理和部署服务。Dubbox 主要关注于微服务架构中的服务治理和服务发现,是分布式系统开发的重要工具。...

    dubbox部署说明

    Dubbox是Alibaba开源的一款高性能、轻量级的Java RPC框架,它是Dubbo的增强版,包含更多的扩展功能和优化。在本文中,我们将深入探讨Dubbox的部署过程以及如何与Zookeeper配合实现分布式服务。 首先,我们需要理解...

    dubbox-master.zip 最新的2018.0706

    Dubbox 是一个基于 Spring 和 Dubbo 的微服务框架,由 Alibaba 开源,它在 Dubbo 基础上增加了一些额外的功能和优化。这个“dubbox-master.zip”压缩包包含的是 Dubbox 项目的源码,是2018年07月06日的最新版本。...

    dubbox2.8.4版本的dubbo-admin

    在dubbox2.8.4的版本中,dubbo-admin提供了更丰富的功能和优化,以适应更复杂的服务治理需求。 【标签】"dubbo-admin"表明这是Dubbo框架的管理工具,用于服务的注册、发现、监控和管理。"dubbox2.8.4"则强调了这个...

    Dubbox框架搭建的Demo

    Dubbox是基于Spring和Apache Dubbo的高可扩展性、高性能的RPC框架,它在Dubbo的基础上添加了许多增强功能,如更多的服务发现机制、更丰富的监控指标以及更好的API支持。本教程将详细介绍如何使用Dubbox搭建一个基础...

    dubbox spring集成.

    dubbox spring集成. dubbox spring集成.dubbox spring集成.

    已经打包好的dubbox示例

    【标题】"已经打包好的dubbox示例"所涉及的知识点主要集中在使用dubbox这一框架构建服务提供者(Provider)和服务消费者(Consumer)的实践中。dubbox是基于Dubbo的扩展版本,它提供了更多的特性,如RESTful支持、...

    dubbox 源码jar包约束文件管理中心

    "dubbox-master.zip"则是dubbox项目的源码包,dubbox是阿里巴巴开源的DUBBO的一个分支,增加了对RESTful API的支持和其他一些新特性,便于开发者构建分布式服务系统。 【知识点详细说明】 1. **DUBBO框架**:DUBBO...

    dubbox介绍

    Dubbox介绍 V1.0

Global site tag (gtag.js) - Google Analytics