spring cloud(四) Eureka配置Httpbasic验证+Eureka配置详解

目录

一、 为EurekaServer配置Httpbasic验证

为了保证服务的安全性,我们为EurekaServer配置Httpbasic验证,只有知道username和password的服务示例才能注册到EurekaServer。那接下来我们修改一下eureka_server项目,配置httpbasic验证,然后为product_server和consume_server配置eureka_server的username和password。

1. 引入spring-boot-starter-security依赖

<!--
...忽略其他配置
-->
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2. 配置security

首先需要禁用csrf(cross site request forgery),当spring security在classpath路径下,它将要求每个客户端请求带上csrf token,eureka客户端通常不会拥有一个有效的csrf token,我们需要在配置中禁用对/eureka/**这个端点进行csrf验证。然后我们还需要开启httpbasic验证。此时我们便可以通过url中配置username和password,去验证客户端的可靠性。为了简单起见,我们在启动类中配置。

package com.yshmsoft;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    @EnableWebSecurity
    static class WebSecurityConfigure extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
             // 在/eureka/**端点忽略csrf验证
             http.csrf().ignoringAntMatchers("/eureka/**");
             // 配置使请求需要通过httpBasic或form验证
             http.authorizeRequests()
                    .anyRequest().authenticated()
                    .and()
                    .formLogin()
                    .and()
                    .httpBasic();
             super.configure(http);
        }
    }
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

3. 修改之前所有项目中eureka服务的url,使支持httpBasic验证

# eureka_server的application.yml
spring:
  application:
    name: eureka-server
  security:
    user:
      name: user
      password: 123456
logging:
  level:
    root: info
    org.springframework:
      security: debug
---
server:
  port: 8761
eureka:
  client:
    service-url:
      defaultZone: http://user:123456@peer2:8762/eureka/
  instance:
    hostname: peer1
    prefer-ip-address: true
spring:
  profiles: peer1
---
server:
  port: 8762
eureka:
  client:
    fetch-registry: false
    register-with-eureka: false
    service-url:
      defaultZone: http://user:123456@peer1:8761/eureka/
  instance:
    hostname: peer2
    prefer-ip-address: true
spring:
  profiles: peer2
# consume_server的application.yml
spring:
  application:
    name: consume-server
server:
  port: 8000
logging:
  level:
    root: info
eureka:
  client:
    service-url:
      defaultZone: http://user1:123456@peer1:8761/eureka/,http://user:123456@peer2:8762/eureka/
# product_server的application.yml
server:
  port: 8080
spring:
  security:
    user:
      name: user
      password: 123456
  datasource:
    platform: h2
    schema: classpath:schema.sql
    data: classpath:data.sql
  jpa:
    generate-ddl: false
    show-sql: true
    hibernate:
      ddl-auto: none
  application:
    name: product-server
logging:
  level:
    root: info
    org.hibernate: info
eureka:
  client:
    service-url:
      defaultZone: http://user:123456@peer1:8761/eureka/,http://user:123456@peer2:8762/eureka/
  1. 启动服务测试服务是否正常运行
    项目启动成功

    需要登录验证

    登录之后服务注册正常

    服务正常访问

    配置httpBasic验证完成

二、 spring cloud中Eureka instance配置参数介绍

  1. appname 设置appname 默认值为null 如果设置spring.application.name则为 spring.application.name
  2. virtualHostName 设置虚拟主机名 默认值为unknown如果设置spring.application.name则为 spring.application.name
  3. secureVirtualHostName 设置安全虚拟主机名 默认值为null 如果设置spring.application.name则为 spring.application.name
eureka配置源码
  1. instanceEnabledOnit 设置eureka实例是否在注册到eureka server之后立刻可以提供服务,一般情况下实例注册到eureka server之后会首先执行一些其他任务。 该值默认为false
  2. nonSecurePort 非https下的端口号 默认为80
  3. securePort https下的端口号 默认为443
  4. nonSecurePortEnabled 是否启用非https端口 默认true
  5. securePortEnabled 是否启用https端口 默认为false
  6. leaseRenewalIntervalInSeconds 设置每隔多长时间向eureka server发送一次心跳包,当超过一定时间eureka server会将超时的client从服务列表中移除 默认为30
  7. leaseExpirationDurationInSeconds 设置接收客户端心跳包超时时间,超过指定时间没有心跳的客户端将被移除,此值至少要比leaseRenewalIntervalInSeconds大才行 默认为90
  8. instanceId 配置实例的唯一id
  9. metadataMap 自定义元数据以name/value对的形式
  10. statusPageUrlPath 查看服务信息的url 此服务依赖spring-boot-actuator 默认值为actuatorPrefix + "/info"
  11. homePageUrlPath 服务跟路径 默认为 /
  12. homePageUrl 服务本路径 默认为null
  13. healthCheckUrlPath 服务健康状态检查url此服务依赖spring-boot-actuator 默认为actuatorPrefix + "/health"
  14. healthCheckUrl 服务健康状态检查url 此服务依赖spring-boot-actuator 默认为null
  15. secureHealthCheckUrl 服务健康状态检查url 此服务依赖spring-boot-actuator 默认为null
  16. preferIpAddress 指优先使用ip地址而不是os提供的hostname 默认false

三、 spring cloud中 Eureka client配置参数介绍

  1. enabled 是否启用此eureka client 默认true
  2. registryFetchIntervalSeconds 间隔多久从defaultUrl同步一次服务注册表默认30
  3. instanceInfoReplicationIntervalSeconds 间隔多久将instance的变化同步到eureka server 默认为30
  4. initialInstanceInfoReplicationIntervalSeconds 初始多长时间将instance信息复制到eureka server 默认为40
  5. 设置多久轮询一次eureka server信息 默认为5分钟
  6. proxyHost 代理host
  7. proxyPort 代理port
  8. proxyUserName 代理username
  9. proxyPassword 代理password
  10. eurekaServerReadTimeoutSeconds 从eureka server读取信息的超时时间 默认为8
  11. eurekaServerConnectTimeoutSeconds 和eureka server连接超时时间默认为5
  12. backupRegistryImpl 获取实现了eureka客户端在第一次启动时读取注册表的信息作为回退选项的实现名称
  13. eurekaServerTotalConnections 设置从eureka client连接所有eureka server的总连接数 默认为200
  14. eurekaServerTotalConnectionsPerHost 设置 eureka连接的所有eureka server的host 默认为50
  15. shouldUnregisterOnShutdown 当服务停止时是否取消注册 默认值为true
  16. allowRedirects 设置eureka server是否可以重定向eureka client到备份服务器或集群中
  17. eurekaServerURLContext 表示eureka注册中心的路径,如果配置为eureka,则为http://x.x.x.x:x/eureka/,在eureka的配置文件中加入此配置表示eureka作为客户端向注册中心注册,从而构成eureka集群。此配置只有在eureka服务器ip地址列表是在DNS中才会用到,默认为null
  18. eurekaServerPort 获取eureka服务器的端口,此配置只有在eureka服务器ip地址列表是在DNS中才会用到。默认为null
  19. eurekaServerDNSName 获取要查询的DNS名称来获得eureka服务器,此配置只有在eureka服务器ip地址列表是在DNS中才会用到。默认为null
  20. region 实例所在region 默认为us-east-1
  21. eurekaConnectionIdleTimeoutSeconds 设置连接空闲多长时间自动关闭 默认为30
  22. registryRefreshSingleVipAddress 设置client只对某个instance的注册表感兴趣默认为null
  23. heartbeatExecutorThreadPoolSize 设置heartbeatExecutor的线程池大小 默认为2
  24. heartbeatExecutorExponentialBackOffBound 设置heartbeatExecutor最大重试次数 默认为10
  25. cacheRefreshExecutorThreadPoolSize 初始化refreshExector线程池大小 默认为2
  26. cacheRefreshExecutorExponentialBackOffBound 设置刷新操作的最大重试次数默认为10
  27. serviceUrl 设置availability zone的map
  28. gZipContent 设置是否支持gzip压缩
  29. useDnsForFetchingServiceUrls eureka客户端是否应该使用DNS机制来获取eureka服务器的地址列表,默认为false
  30. registerWithEureka 设置是否注册到eureka server 默认为true
  31. fetchRemoteRegionsRegistry 设置是否从eureka获取regions列表 默认为true
  32. filterOnlyUpInstances 设置是否过滤只留下状态为UP的instance 默认为true
  33. fetchRegistry 设置是否获取注册表 默认为true
  34. dollarReplacement 获取一个$符号的替身 默认为_-
  35. escapeCharReplacement 获取一个的替身默认为_

本篇介绍了如何为eureka server配置httpBasic验证。详细列出了eureka的各项参数配置以及默认值。在分布式场景下,我们怎么保证服务的负载均衡呢?下篇将介绍spring cloud中负载均衡的应用。敬请期待

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容