1.在properties中加入對應的配置
#注冊中心服務ID
spring.application.name=eureka-server
eureka.instance.hostname=localhost
#端口号
server.port=8761
# eureka.client.registerWithEureka :表示是否将自己注冊到Eureka Server,預設為true。
# 由于目前這個應用就是Eureka Server,故而設為false
eureka.client.register-with-eureka=false
# eureka.client.fetchRegistry :表示是否從Eureka Server擷取注冊資訊,預設為true。因為這是一個單點的Eureka Server,
# 不需要同步其他的Eureka Server節點的資料,故而設為false。
eureka.client.fetch-registry=false
#添加認證的賬号密碼
spring.security.user.name=user
spring.security.user.password=pwd
# eureka.client.serviceUrl.defaultZone :設定與Eureka Server互動的位址,查詢服務和注冊服務都需要依賴這個位址。預設是
#eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka
#http://user:[email protected]:8761/eureka/
eureka.client.serviceUrl.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:${server.port}/eureka/
#Eureka Server在運作期間,會統計心跳失敗的比例在15分鐘之内是否低于85%,
# Eureka Server會将目前的執行個體注冊資訊保護起來,同時提示警告。
#關閉自我保護僅允許在測試環境,false關閉
#eureka.server.enableSelfPreservation=true
2.添加對應的pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
3.啟動EurekaServer後在浏覽器中http://localhost:8761會自動跳轉到http://localhost:8761/login界面,輸入對應的賬号密碼進入EurekaServer界面
4.加入安全認賬後,需要同步修改用戶端的url
#服務名稱
spring.application.name=service-client
#端口号
server.port=8762
#在注冊中心中進行注冊
eureka.client.serviceUrl.defaultZone=http://user:[email protected]:8761/eureka/
#啟動服務發現的功能,開啟了才能調用其它服務
#spring.cloud.config.discovery.enabled=true
#發現的服務的名字--對應注測中心的服務名字
#spring.cloud.config.discovery.serviceId=eurka-server
5.修改完成後啟動用戶端向Eureka注冊時會報Cannot execute request on any known server錯誤。
DiscoveryClient_SERVICE-CLIENT/WIN10-20171114L:service-client:8762 - registration failed Cannot execute request on any known server
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.9.2.jar:1.9.2]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.2.jar:1.9.2]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.9.2.jar:1.9.2]
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.9.2.jar:1.9.2]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.2.jar:1.9.2]
at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:829) ~[eureka-client-1.9.2.jar:1.9.2]
at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121) [eureka-client-1.9.2.jar:1.9.2]
at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:101) [eureka-client-1.9.2.jar:1.9.2]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_141]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_141]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_141]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_141]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_141]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_141]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_141]
在這裡我找到了解決的辦法 https://blog.csdn.net/yakson/article/details/80860394
在eurka服務中添加一個安全認證類。
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
/**
* 高版本的丢棄了
*
* security:
* basic:
* enabled: true
*
* 配置,應該使用以下方式開啟
*
* @param http
* @throws Exception
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
// Configure HttpSecurity as needed (e.g. enable http basic).
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);
http.csrf().disable();
//注意:為了可以使用 http://${user}:${password}@${host}:${port}/eureka/ 這種方式登入,是以必須是httpBasic,
// 如果是form方式,不能使用url格式登入
http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
}
重新開機注冊中心後,用戶端就可以向注冊中心注冊節點了。