在开发中,有时候需要限制访问的权限,白名单就是一种方法。对于Java Web应用,Spring的拦截器可以拦截Web接口的调用;而对于dubbo接口,Spring的拦截器就不管用了。

dubbo提供了Filter扩展,可以通过自定义Filter来实现这个功能。本文通过一个事例来演示如何实现dubbo接口的IP白名单。

  1. 扩展Filter
    实现com.alibaba.dubbo.rpc.Filter接口:

    1. public class AuthorityFilter implements Filter {
    2. private static final Logger LOGGER = LoggerFactory.getLogger(AuthorityFilter.class);
    3. private IpWhiteList ipWhiteList;
    4. //dubbo通过setter方式自动注入
    5. public void setIpWhiteList(IpWhiteList ipWhiteList) {
    6. this.ipWhiteList = ipWhiteList;
    7. }
    8. @Override
    9. public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
    10. if (!ipWhiteList.isEnabled()) {
    11. LOGGER.debug("白名单禁用");
    12. return invoker.invoke(invocation);
    13. }
    14. String clientIp = RpcContext.getContext().getRemoteHost();
    15. LOGGER.debug("访问ip为{}", clientIp);
    16. List<String> allowedIps = ipWhiteList.getAllowedIps();
    17. if (allowedIps.contains(clientIp)) {
    18. return invoker.invoke(invocation);
    19. } else {
    20. return new RpcResult();
    21. }
    22. }
    23. }

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

  2. 配置文件
    参考:调用拦截扩展
    在resources目录下添加纯文本文件META-INF/dubbo/com.alibaba.dubbo.rpc.Filter,内容如下:
    1. xxxFilter=com.xxx.AuthorityFilter

    修改dubbo的provider配置文件,在dubbo:provider中添加配置的filter,如下:

    1. <dubbo:provider filter="xxxFilter" />

这样就可以实现dubbo接口的IP白名单功能了。

dubbo白名单通过filter,spring web通过拦截器或者filter即可的更多相关文章

  1. (转)spring中的拦截器(HandlerInterceptor+MethodInterceptor)

    1.  过滤器跟拦截器的区别 在说拦截器之前,不得不说一下过滤器,有时候往往被这两个词搞的头大. 其实我们最先接触的就是过滤器,还记得web.xml中配置的<filter>吗~ 你应该知道 ...

  2. spring mvc +cookie+拦截器功能 实现系统自动登陆

    先看看我遇到的问题: @ResponseBody @RequestMapping("/logout") public Json logout(HttpSession session ...

  3. 【转载】Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门

    Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...

  4. Spring mvc登录拦截器

    自己实现的第一个Spring mvc登录拦截器 题目要求:拒绝未登录用户进入系统,只要发现用户未登录,则将用户请求转发到/login.do要求用户登录 实现步骤: 1.在spring的配置文件中添加登 ...

  5. 玩转spring MVC(七)----拦截器

    继续在前边的基础上来学习spring MVC中拦截器的使用,下面通过一个例子来实现(完整项目在这里下载:http://download.csdn.net/detail/u012116457/84334 ...

  6. Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门

    Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...

  7. SpringBoot 03: 常用web组件 - - - 拦截器 + Servlet + 过滤器

    常用web组件 拦截器 Servlet 过滤器 使用思想 创建自定义类 实现或者继承框架里的接口或类 将自定义类注册到框架中 使用自定义类 拦截器 说明 拦截器是SpringMVC中的一种对象,能拦截 ...

  8. Spring Boot配置拦截器及实现跨域访问

    拦截器功能强大,能够深入方法前后,常应用于日志记录.权限检查和性能检测等,几乎是项目中不可或缺的一部分,本文就来实现Spring Boot自定义拦截器的配置. 理论指导 问:Spring Boot怎么 ...

  9. spring boot 使用拦截器,注解 实现 权限过滤

    http://www.cnblogs.com/zhangXingSheng/p/7744997.html spring boot 使用拦截器 实现 用户登录拦截 http://www.cnblogs. ...

随机推荐

  1. Centos之命令搜索命令whereis与which

    Centos之命令搜索命令whereis与which whereis 命令名 #搜索命令所在路径及帮助文档所在位置 选项: -b :只查找可执行文件位置 -m:只查找帮助文件 [root@localh ...

  2. Effective STL 学习笔记 Item 17: Swap Trick

    假设有若干对象存于一个 vector 中: class Widget; vector<Widget> vw; 后来由于某些原因,从该容器中删除了若干对象(参考erase-remove id ...

  3. C#基础系列 - 抽象类及其方法的学习

    在C#中使用关键字 abstract 来定义抽象类和抽象方法. 不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例. "一个包含一个或多个纯虚函数的类 ...

  4. 【LOJ】#2072. 「JSOI2016」独特的树叶

    题解 干脆题解套题解好了 毕竟我的hash方法是抄小迪的 https://www.cnblogs.com/RabbitHu/p/9165770.html 小迪太巨了%%% 之前模数是八位的WA了几个点 ...

  5. 洛谷 P2042 [NOI2005]维护数列-Splay(插入 删除 修改 翻转 求和 最大的子序列)

    因为要讲座,随便写一下,等讲完有时间好好写一篇splay的博客. 先直接上题目然后贴代码,具体讲解都写代码里了. 参考的博客等的链接都贴代码里了,有空再好好写. P2042 [NOI2005]维护数列 ...

  6. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

    登录服务器,使用root用户连接mysql时出现错误提示: $ bin/mysql -uroot -p Enter password: ERROR (HY000): Can't connect to ...

  7. 最新OFFICE 0day漏洞分析

    漏洞概述 fireeye最近公布了一个OFFICE 0day,在无需用户交互的情况下,打开word文档就可以通过hta脚本执行任意代码.经过研究发现,此漏洞的成因主要是word在处理内嵌OLE2LIN ...

  8. 如何离线安装GitHub for windows?

    此文献给xp用户和被墙用户. 今天群里(GitHub家园 225932282)有人说GitHub for windows安装不上,错误提示如下,看了下感觉应该是被墙了,我试了试下面的网址,没问题,所以 ...

  9. 【洛谷】NOIP提高组模拟赛Day1【组合数学】【贪心+背包】【网络流判断是否满流以及流量方案】

    U41568 Agent1 题目背景 2018年11月17日,中国香港将会迎来一场XM大战,是世界各地的ENLIGHTENED与RESISTANCE开战的地点,某地 的ENLIGHTENED总部也想派 ...

  10. python开发_tkinter_图形随鼠标移动

    做这个东西的时候,灵感源自于一个js效果: 两个眼睛随鼠标移动而移动 运行效果: =============================================== 代码部分: ===== ...