前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Eureka的注册黑白名单

Eureka的注册黑白名单

作者头像
叔叔
发布2018-08-20 16:31:55
2.8K0
发布2018-08-20 16:31:55
举报
文章被收录于专栏:叔叔的博客叔叔的博客

代码警告

简介

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

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

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

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

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

实现

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

代码语言:javascript
复制
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中

代码语言:javascript
复制
org.springframework.context.ApplicationContextInitializer=\
com.xxx.xxx.xxx.EurekaApplicationContextInitializer
代码语言:javascript
复制
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。

代码语言:javascript
复制
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就可以随便自己定义规则了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叔叔的博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码警告
    • 简介
      • 实现
      相关产品与服务
      消息队列 TDMQ
      消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档