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:pwd@localhost: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:pwd@localhost: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();
}
}
重啓註冊中心後,客戶端就可以向註冊中心註冊節點了。