目錄
- spring cloud(一) 從一個(gè)簡(jiǎn)單的springboot服務(wù)開(kāi)始
- spring cloud(二) 起步皆尔,集成Eureka服務(wù)發(fā)現(xiàn)
- spring cloud(三)Eureka高可用性+Feign聲明式Rest客戶端
-
spring cloud(四) Eureka配置Httpbasic驗(yàn)證+Eureka配置詳解
未完待續(xù)
一、 為EurekaServer配置Httpbasic驗(yàn)證
為了保證服務(wù)的安全性,我們?yōu)镋urekaServer配置Httpbasic驗(yàn)證,只有知道username和password的服務(wù)示例才能注冊(cè)到EurekaServer渤早。那接下來(lái)我們修改一下eureka_server項(xiàng)目缸濒,配置httpbasic驗(yàn)證锅知,然后為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),當(dāng)spring security在classpath路徑下幻馁,它將要求每個(gè)客戶端請(qǐng)求帶上csrf token洗鸵,eureka客戶端通常不會(huì)擁有一個(gè)有效的csrf token,我們需要在配置中禁用對(duì)/eureka/**這個(gè)端點(diǎn)進(jìn)行csrf驗(yàn)證越锈。然后我們還需要開(kāi)啟httpbasic驗(yàn)證。此時(shí)我們便可以通過(guò)url中配置username和password膘滨,去驗(yàn)證客戶端的可靠性甘凭。為了簡(jiǎn)單起見(jiàn),我們?cè)趩?dòng)類中配置火邓。
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/**端點(diǎn)忽略csrf驗(yàn)證
http.csrf().ignoringAntMatchers("/eureka/**");
// 配置使請(qǐng)求需要通過(guò)httpBasic或form驗(yàn)證
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic();
super.configure(http);
}
}
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
3. 修改之前所有項(xiàng)目中eureka服務(wù)的url,使支持httpBasic驗(yàn)證
# 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/
- 啟動(dòng)服務(wù)測(cè)試服務(wù)是否正常運(yùn)行
配置httpBasic驗(yàn)證完成
二丹弱、 spring cloud中Eureka instance配置參數(shù)介紹
- appname 設(shè)置appname 默認(rèn)值為null 如果設(shè)置spring.application.name則為 spring.application.name
- virtualHostName 設(shè)置虛擬主機(jī)名 默認(rèn)值為unknown如果設(shè)置spring.application.name則為 spring.application.name
- secureVirtualHostName 設(shè)置安全虛擬主機(jī)名 默認(rèn)值為null 如果設(shè)置spring.application.name則為 spring.application.name
- instanceEnabledOnit 設(shè)置eureka實(shí)例是否在注冊(cè)到eureka server之后立刻可以提供服務(wù)德撬,一般情況下實(shí)例注冊(cè)到eureka server之后會(huì)首先執(zhí)行一些其他任務(wù)。 該值默認(rèn)為false
- nonSecurePort 非https下的端口號(hào) 默認(rèn)為80
- securePort https下的端口號(hào) 默認(rèn)為443
- nonSecurePortEnabled 是否啟用非https端口 默認(rèn)true
- securePortEnabled 是否啟用https端口 默認(rèn)為false
- leaseRenewalIntervalInSeconds 設(shè)置每隔多長(zhǎng)時(shí)間向eureka server發(fā)送一次心跳包躲胳,當(dāng)超過(guò)一定時(shí)間eureka server會(huì)將超時(shí)的client從服務(wù)列表中移除 默認(rèn)為30
- leaseExpirationDurationInSeconds 設(shè)置接收客戶端心跳包超時(shí)時(shí)間蜓洪,超過(guò)指定時(shí)間沒(méi)有心跳的客戶端將被移除,此值至少要比leaseRenewalIntervalInSeconds大才行 默認(rèn)為90
- instanceId 配置實(shí)例的唯一id
- metadataMap 自定義元數(shù)據(jù)以name/value對(duì)的形式
- statusPageUrlPath 查看服務(wù)信息的url 此服務(wù)依賴spring-boot-actuator 默認(rèn)值為actuatorPrefix + "/info"
- homePageUrlPath 服務(wù)跟路徑 默認(rèn)為 /
- homePageUrl 服務(wù)本路徑 默認(rèn)為null
- healthCheckUrlPath 服務(wù)健康狀態(tài)檢查url此服務(wù)依賴spring-boot-actuator 默認(rèn)為actuatorPrefix + "/health"
- healthCheckUrl 服務(wù)健康狀態(tài)檢查url 此服務(wù)依賴spring-boot-actuator 默認(rèn)為null
- secureHealthCheckUrl 服務(wù)健康狀態(tài)檢查url 此服務(wù)依賴spring-boot-actuator 默認(rèn)為null
- preferIpAddress 指優(yōu)先使用ip地址而不是os提供的hostname 默認(rèn)false
三坯苹、 spring cloud中 Eureka client配置參數(shù)介紹
- enabled 是否啟用此eureka client 默認(rèn)true
- registryFetchIntervalSeconds 間隔多久從defaultUrl同步一次服務(wù)注冊(cè)表默認(rèn)30
- instanceInfoReplicationIntervalSeconds 間隔多久將instance的變化同步到eureka server 默認(rèn)為30
- initialInstanceInfoReplicationIntervalSeconds 初始多長(zhǎng)時(shí)間將instance信息復(fù)制到eureka server 默認(rèn)為40
- 設(shè)置多久輪詢一次eureka server信息 默認(rèn)為5分鐘
- proxyHost 代理host
- proxyPort 代理port
- proxyUserName 代理username
- proxyPassword 代理password
- eurekaServerReadTimeoutSeconds 從eureka server讀取信息的超時(shí)時(shí)間 默認(rèn)為8
- eurekaServerConnectTimeoutSeconds 和eureka server連接超時(shí)時(shí)間默認(rèn)為5
- backupRegistryImpl 獲取實(shí)現(xiàn)了eureka客戶端在第一次啟動(dòng)時(shí)讀取注冊(cè)表的信息作為回退選項(xiàng)的實(shí)現(xiàn)名稱
- eurekaServerTotalConnections 設(shè)置從eureka client連接所有eureka server的總連接數(shù) 默認(rèn)為200
- eurekaServerTotalConnectionsPerHost 設(shè)置 eureka連接的所有eureka server的host 默認(rèn)為50
- shouldUnregisterOnShutdown 當(dāng)服務(wù)停止時(shí)是否取消注冊(cè) 默認(rèn)值為true
- allowRedirects 設(shè)置eureka server是否可以重定向eureka client到備份服務(wù)器或集群中
- eurekaServerURLContext 表示eureka注冊(cè)中心的路徑隆檀,如果配置為eureka,則為http://x.x.x.x:x/eureka/粹湃,在eureka的配置文件中加入此配置表示eureka作為客戶端向注冊(cè)中心注冊(cè)恐仑,從而構(gòu)成eureka集群。此配置只有在eureka服務(wù)器ip地址列表是在DNS中才會(huì)用到为鳄,默認(rèn)為null
- eurekaServerPort 獲取eureka服務(wù)器的端口裳仆,此配置只有在eureka服務(wù)器ip地址列表是在DNS中才會(huì)用到。默認(rèn)為null
- eurekaServerDNSName 獲取要查詢的DNS名稱來(lái)獲得eureka服務(wù)器孤钦,此配置只有在eureka服務(wù)器ip地址列表是在DNS中才會(huì)用到歧斟。默認(rèn)為null
- region 實(shí)例所在region 默認(rèn)為us-east-1
- eurekaConnectionIdleTimeoutSeconds 設(shè)置連接空閑多長(zhǎng)時(shí)間自動(dòng)關(guān)閉 默認(rèn)為30
- registryRefreshSingleVipAddress 設(shè)置client只對(duì)某個(gè)instance的注冊(cè)表感興趣默認(rèn)為null
- heartbeatExecutorThreadPoolSize 設(shè)置heartbeatExecutor的線程池大小 默認(rèn)為2
- heartbeatExecutorExponentialBackOffBound 設(shè)置heartbeatExecutor最大重試次數(shù) 默認(rèn)為10
- cacheRefreshExecutorThreadPoolSize 初始化refreshExector線程池大小 默認(rèn)為2
- cacheRefreshExecutorExponentialBackOffBound 設(shè)置刷新操作的最大重試次數(shù)默認(rèn)為10
- serviceUrl 設(shè)置availability zone的map
- gZipContent 設(shè)置是否支持gzip壓縮
- useDnsForFetchingServiceUrls eureka客戶端是否應(yīng)該使用DNS機(jī)制來(lái)獲取eureka服務(wù)器的地址列表,默認(rèn)為false
- registerWithEureka 設(shè)置是否注冊(cè)到eureka server 默認(rèn)為true
- fetchRemoteRegionsRegistry 設(shè)置是否從eureka獲取regions列表 默認(rèn)為true
- filterOnlyUpInstances 設(shè)置是否過(guò)濾只留下?tīng)顟B(tài)為UP的instance 默認(rèn)為true
- fetchRegistry 設(shè)置是否獲取注冊(cè)表 默認(rèn)為true
- dollarReplacement 獲取一個(gè)$符號(hào)的替身 默認(rèn)為_(kāi)-
- escapeCharReplacement 獲取一個(gè)的替身默認(rèn)為_
本篇介紹了如何為eureka server配置httpBasic驗(yàn)證司训。詳細(xì)列出了eureka的各項(xiàng)參數(shù)配置以及默認(rèn)值构捡。在分布式場(chǎng)景下,我們?cè)趺幢WC服務(wù)的負(fù)載均衡呢壳猜?下篇將介紹spring cloud中負(fù)載均衡的應(yīng)用勾徽。敬請(qǐng)期待