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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏developerHaoz 的安卓之旅

Android Volley 源码解析(一),网络请求的执行流程

花了好几天,重新研究了 Volley 的源码实现,比起之前又有了一番新的体会,啃源码真的是一件让人纠结的事情,阅读优秀的源码,特别是难度相对较大的源码,一旦陷入...

1534
来自专栏别先生

基于jsp+servlet图书管理系统之后台用户信息插入操作

前奏:   刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长...

3886
来自专栏AhDung

【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装

在asp.net项目中,添加一个【一般处理程序】来处理请求是很自然的事,这样会得到一个实现自IHttpHandler的类,然后只需在ProcessRequest...

3803
来自专栏编程思想之路

WiFiAp探究实录--功能实现与源码分析

Android虐我千百遍,我待Android如初恋。 ——————编辑于2017-08-02——————— wifi热点说的是wifiAp相...

1.7K9
来自专栏用户2442861的专栏

详解HttpURLConnection

http://blog.csdn.net/woxueliuyun/article/details/43267365

3391
来自专栏有趣的django

Django rest framework源码分析(1)----认证

一、基础 1.1.安装 两种方式: github pip直接安装 pip install django-rest-framework 1.2.需要先了解的一...

65911
来自专栏北京马哥教育

MongoDB多纬度监控方法详解

一、mongostat工具方法 mongostat是mongdb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如...

4735
来自专栏大学生计算机视觉学习DeepLearning

c++ 网络编程(九)TCP/IP LINUX/windows--使用IOCP模型 多线程超详细教程 以及 多线程实现服务端

原文链接:https://www.cnblogs.com/DOMLX/p/9661012.html

4412
来自专栏Android开发指南

17:网络编程

3335
来自专栏iOS 开发杂谈

iOS多线程之一:基本概念

进程:就是一个正在执行的程序。 线程:是执行程序最基本的单元,它有自己栈和寄存器。

691

扫码关注云+社区

领取腾讯云代金券