SpringCloud系列五:為Eureka Server添加用戶認證及元數據


1. 回顧

  上一篇博客講解了Eureka集群及將微服務注冊到集群上。在前面的講解中,Eureka Server都是允許匿名訪問的,本次將講解如何構建一個需要登錄才能訪問的Eureka Server。

2. 為Eureka Server添加用戶認證

  > 復制項目 microservice-discovery-eureka,將ArtifactId修改為 microservice-discovery-eureka-authenticating。

  > 在pom.xml中添加spring-boot-starter-seurity的依賴,該依賴為Eureka Server提供用戶認證的能力。

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>

  > 在application.yml中添加認證配置。如何不進行配置,則默認用戶名是 user ,默認密碼是一個隨機值,會在項目啟動時打印出來。

spring:
  security:
    user:
      name: root          # 用戶名
      password: 123456    # 密碼

  > 啟動項目,訪問 http://localhost:8761/ 即可看見身份驗證的對話框,輸出設置的用戶名和密碼即可進入。

  > 將微服務中的 eureka.client.service-url.defaultZone 改為 http://root:123456@localhost:8761/eureka/ 即可注冊到需認證的Eureka Server中。但是我測試一直沒有成功,跟蹤日志發現是因為csrf的問題,微服務的請求中不包含csrf參數,因此被CsrfFilter攔截。版本Edgware.SR2測試成功,但是該版本中的配置有所不同,該版本的配置為:

security:
  basic:
    enabled: true
  user:
    name: root
    password: 123456

--------------------------------------------------------------------------- 補充開始 --------------------------------------------------------------------------------------------------------

   > 上面已經說過,因為Eureka Server默認開啟了CsrfFilter,導致微服務不能注冊成功。因此只需要關閉Eureka Server的CsrfFilter即可

  > 在Eureka Server中添加如下配置類即可關閉Csrf校驗

package com.itmuch.cloud.microservicediscoveryeurekaauthenticating;

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;

@EnableWebSecurity
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        super.configure(http);
    }
}

  > 重新啟動 microservice-discovery-eureka-authenticating

  > 修改 microservice-provider-user 的 application.yml中 的 defaultZone為 http://user:password123@localhost:8761/eureka,然后啟動

  > 注冊成功

--------------------------------------------------------------------------- 補充結束 --------------------------------------------------------------------------------------------------------

 

 

3. Eureka的元數據

  > Eureka的元數據有兩種,分別為標准元數據和自定義元數據。

    標准元數據:主機名、IP地址、端口號、狀態頁和健康檢查等信息,這些信息都會被發布在服務注冊表中,用於服務之間的調用。

    自定義元數據:自定義元數據可以使用eureka.instance.metadata-map配置,這些元數據可以在遠程客戶端中訪問,但是一般不會改變客戶端的行為,除非客戶端知道該元數據的含義。

  > 復制項目 microservice-provider-user,將ArtifactId修改為 microservice-provider-user-metadata

  > 修改application.yml,使用eureka.instance.instance.metadata-map屬性為該微服務添加自定義的元數據。

eureka:
    metadata-map:
      my-metadata: 我自定義的元數據

  > 復制項目 microservice-consumer-movie,將ArtifactId修改為 microservice-consumer-movie-metadata

  > 修改 MovieController,添加方法showInfo(),展示微服務 microservice-provider-user-metadata 的元數據信息

/** * 查詢microservice-provider-user服務的信息並返回 * * @return */ @GetMapping("/user-instance") public List<ServiceInstance> showInfo() { return this.discoveryClient.getInstances("microservice-provider-user"); }

  > 啟動 microservice-discovery-eureka(必須第一個啟動

  > 啟動 microservice-provider-user-metadata

  > 啟動 microservice-consumer-movie-metadata

  > 訪問 http://localhost:8010/user-instance/,返回類似如下的內容。

  > 將內容復制到 http://json.cn 中,看的更清晰明了。

4. 總結

  這篇是很尷尬的一篇,搞了半天也沒能將微服務注冊到該版本的Eureka Server中,后續如果解決了會進行更新。

  后續將講解Eureka剩余的知識:自我保護模式、健康檢查、多網卡環境下的IP選擇等。敬請期待~~~

5. 參考

  周立 --- 《Spring Cloud與Docker微服務架構與實戰》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM