博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Eureka安全访问
阅读量:6590 次
发布时间:2019-06-24

本文共 2576 字,大约阅读时间需要 8 分钟。

背景

在使用注册服务的时候,我们启动了Eureka Server,然后在浏览器中输入后,直接回车,就进入了Spring Cloud的服务治理页面,在公网部署应用存在以下问题:

1.普通用户可以直接访问我们的服务治理页面;
2.普通用户可以将自己的服务注册到生成环景。

解决方案

添加spring-security支持

org.springframework.boot
spring-boot-starter-security

在配置文件bootstrap.yml加入安全认证

spring:  profiles: default  cloud:    config:      enabled: false# 安全认证的配置  security:    basic:      enabled: true    user:      name: pikachu  # 用户名      password: pikachu   # 用户密码eureka:  instance:    preferIpAddress: true    leaseRenewalIntervalInSeconds: 1    leaseExpirationDurationInSeconds: 3  client:    registerWithEureka: false    fetchRegistry: false    serviceUrl:      defaultZone: ${EUREKA_DEFAULT_ZONE:http://pikachu:pikachu@localhost:8761/eureka/ }    registryFetchIntervalSeconds: 1  server:    evictionIntervalTimerInMs: 1000

关键配置

security:    basic:      enabled: true    user:      name: pikachu  # 用户名      password: pikachu   # 用户密码
defaultZone: ${EUREKA_DEFAULT_ZONE:http://pikachu:pikachu@localhost:8761/eureka/}

启动应用查看效果

image

输入密码后可以正常访问页面

image

正常服务注册效果比较

使用默认配置做服务注册,可以看到服务注册失败。

image

调整配置后可以看到,服务正常启动

image

正常注册

image

优化

上述解决方案虽然解决了我们公网部署,生产环境部署的安全访问问题。但是针对团队内部的权限依然没有管理好。

通常我们的服务配置存放在两个地方:

1.application.yml2.bootstrap.yml
项目都能从两个文件中读取配置。但是bootstrap.yml优先于application.yml加载,会初始化系统的环境配置信息。  当使用Spring Cloud时,通常从服务器加载不同环境的配置数据。为了获取URL(和其他连接配置,如密码等),我们就需要一个较早的或“bootstrap”配置。因此,我们可以将配置服务器属性放在bootstrap.yml中,该属性用于加载实际配置数据(通常覆盖application.yml [如果存在]中的内容)。  Spring cloud 我们通常都会有config服务。通过config服务读取各个环境的配置信息,所有我们只需要在bootstrap.yml中配置信息来源。将具体的配置写入到application.yml中。

bootstrap.yml如下

spring:  profiles: uat  cloud:    config:      label: master      name: cloud-demo-server      discovery:        serviceId: cloud-config-server        enabled: true      failFast: true      retry:        maxAttempts: 32        multiplier: 1.5        maxInterval: 10000

application.yml如下

spring:  profiles: default  cloud:    config:      enabled: false# 安全认证的配置  security:    basic:      enabled: true    user:      name: pikachu  # 用户名      password: pikachu   # 用户密码eureka:  instance:    preferIpAddress: true    leaseRenewalIntervalInSeconds: 1    leaseExpirationDurationInSeconds: 3  client:    registerWithEureka: false    fetchRegistry: false    serviceUrl:      defaultZone: ${EUREKA_DEFAULT_ZONE:http://pikachu:pikachu@localhost:8761/eureka/ }    registryFetchIntervalSeconds: 1  server:    evictionIntervalTimerInMs: 1000

当然,在一些情况上不用我们不用那么区分这两个文件,只需要使用application文件即可,把全部选项都写在这里,效果基本是一致的,在不考虑上面的加载顺序覆盖的问题上。

总结

通过以上配置我们基本能解决Eureka的安全访问问题:

1.普通用户可以直接通过域名访问我们的服务治理页面;
2.普通用户可以将自己的服务注册到生产环境;
3.团队内部成员权限隔离

转载地址:http://wbuio.baihongyu.com/

你可能感兴趣的文章
JS常见的字符串操作
查看>>
洛谷P1069 细胞分裂 数学
查看>>
JAVA中的编码分析
查看>>
查看源代码Source not found及在eclipse中配置jdk的src.zip源代码
查看>>
document.all用法
查看>>
uniGUI试用笔记(二)
查看>>
HOG特征-理解篇
查看>>
Microsoft.AlphaImageLoader滤镜解说
查看>>
extjs_02_grid(显示本地数据,显示跨域数据)
查看>>
超过响应缓冲区限制
查看>>
ubuntu 下安装 matplotlib
查看>>
webservice的几个简单概念
查看>>
underscore 1.7.0 api
查看>>
C# CheckedListBox控件的使用方法
查看>>
spring Transaction Management --官方
查看>>
iOS开发-清理缓存功能的实现
查看>>
IS_ERR、PTR_ERR、ERR_PTR
查看>>
html5 canvas 奇怪的形状垂直渐变
查看>>
mac java环境
查看>>
lamp 一键安装
查看>>