专栏首页叔叔的博客Eureka的注册黑白名单

Eureka的注册黑白名单

代码警告

简介

使用过Spring Cloud的eureka的项目,肯定会遇到本地开发注册到其他环境的eureka,影响他人使用。所以我们觉得往eureka注册需要做个限制。

eureka暂时还没有配置方案来解决这个问题,只能自己拓展。

在网上找到别人写的一个中间件,解决spring cloud使用起来的一些诟病。

地址:https://gitee.com/gengzi/Nepxion-Discovery

现在就实现eureka的注册白名单。

实现

eureka注册服务,入口方法是EurekaAutoServiceRegistration.start()

private EurekaServiceRegistry serviceRegistry;

public EurekaAutoServiceRegistration(ApplicationContext context, EurekaServiceRegistry serviceRegistry, EurekaRegistration registration) {
    this.context = context;
    this.serviceRegistry = serviceRegistry;
    this.registration = registration;
}

this.serviceRegistry.register(this.registration);

需要在初始化serviceRegistry的时候,修改为我们自定义的EurekaServiceRegistry

首先自定义spring的初始化器,加到spring.factories中

org.springframework.context.ApplicationContextInitializer=\
com.xxx.xxx.xxx.EurekaApplicationContextInitializer
public class EurekaApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {

    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {

        applicationContext.getBeanFactory().addBeanPostProcessor(new InstantiationAwareBeanPostProcessorAdapter() {
            @Override
            public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

                if (bean instanceof EurekaServiceRegistry) {
                    EurekaServiceRegistry eurekaServiceRegistry = (EurekaServiceRegistry) bean;
                    return new EurekaServiceRegistryDecorator(eurekaServiceRegistry, applicationContext);
                }

                return bean;
            }
        });
    }

}

如果是EurekaServiceRegistry,返回我们包装的EurekaServiceRegistryDecorator。

public class EurekaServiceRegistryDecorator extends EurekaServiceRegistry {

 @Override
    public void register(EurekaRegistration registration) {
        Boolean registerControlEnabled = isRegisterControlEnabled(environment);
        if (registerControlEnabled) {
            InetAddress address = null;
            try {
                address = InetAddress.getLocalHost();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
            validateWhitelist(address.getHostAddress());
        }

        serviceRegistry.register(registration);
    }

然后在这个register就可以随便自己定义规则了。

本文分享自微信公众号 - 叔叔的博客(gh_b2b55a55dca8)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PageHelper插件

    一、使用 PageHelper.startPage(pn,5); //startPage后紧跟的这个查询就是分页查询 List<Employee> em...

    叔叔
  • 关于bootstrap.yml,踩的坑

    首先,bootstrap.yml作为配置文件,是在springcloud中实现的,而不是springboot!

    叔叔
  • SpringCloud服务比较快的下线配置

    一、前言 想实现热部署,需要服务很快的上下线,所以需要修改相关配置。 二、配置 Eureka Server配置 # eureka server刷新readCac...

    叔叔
  • Java面试笔试题大汇总(最全+详细答案)

    声明:有人说, 有些面试题很变态,个人认为其实是因为我们基础不扎实或者没有深入。本篇文章来自一位很资深的前辈对于最近java面试题目所做的总结归纳,有170道题...

    汤高
  • 经典Java面试题收集

    1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象...

    nnngu
  • 在C#中使用依赖注入-生命周期控制

    在使用依赖注入的过程当中,除了应用设计模式注意代码的变化隔离之外,另外一个重要的内容就是生命周期控制。

    newbe36524
  • Struts2数据封装

    用户3112896
  • 设计原则

    一、面向对象应用程序开发原则(SOLID) 1单一职责原则(SRP) 定义: 一个类应该只有一个发生变化的原因。这条原则曾被称为内聚性,即一个模块的组成元素之间...

    甜橙很酸
  • Java编程思想第五版(On Java8)(十)-接口

    这种机制在编程语言中不常见,例如 C++ 只对这种概念有间接的支持。而在 Java 中存在这些关键字,说明这些思想很重要,Java 为它们提供了直接支持。

    JavaEdge
  • 热乎乎的面经:Spring中Scheduled和Async两种调度方式有啥区别?

    最近有小伙伴出去面试,回来跟我说:冰河,我去XXX公司面试,面试官竟然问了我一个关于Spring中Scheduled和Async调度的问题,我竟然没回答上来,你...

    冰河

扫码关注云+社区

领取腾讯云代金券