Spring Cloud Eureka 實現安全控制

古時的風箏發表於2020-01-10

本系列目錄:

如果你也打算學習 Spring Cloud
Spring Cloud Eureka 實現服務註冊與發現

上一篇講了用 Eureka 實現單體版的服務註冊與發現。因為本篇是在上一篇的基礎上的一點擴充,所以讀此篇之前要保證看了上一篇。

Eureka 如果不加安全控制,會存在下列問題

  1. Eureka 控制檯可以看到各服務的狀態和引數等資訊,如果不加控制,只要知道註冊中心的地址,就可以登入上去看到各服務資訊;
  2. 只要知道註冊中心地址,服務提供者就可以註冊上來,對外提供服務;
  3. 只要知道註冊中心地址,服務消費者就可以發現註冊中心的服務,並呼叫服務;

為了安全起見,我們還是為 Eureka 增加安全控制,這裡用 Spring Security 實現最基礎的使用者名稱、密碼控制。

一個小知識點而已,幾個配置就可以完成。

1. maven 包引用

在服務註冊中心專案的 pom.xml 檔案中引入 Spring Security 包。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
複製程式碼

2.增加應用配置

在應用配置檔案中增加關於 security 的配置,一般是放在 application.yml ,但是本專案中分了 application.yml 和 bootstrap.yml 兩個配置檔案,所以我這裡是放在了 application.yml 中。

spring:
  application:
    name: kite-eureka-center
  security:
      user:
        name: test               # 使用者名稱
        password: 123456   # 密碼
複製程式碼

此時,啟動並訪問 Eureka 管理控制檯,會提示輸入使用者名稱和密碼,輸入上面的 name 和 password 即可。

3.服務提供者註冊服務

在服務提供者的應用配置檔案中做以下修改即可

eureka:
  instance:
    statusPageUrlPath: /actuator/info
    healthCheckUrlPath: /actuator/health
    prefer-ip-address: true
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://test:123456@localhost:3000/eureka/
複製程式碼

上述配置與沒有安全控制的時候唯一的差別就是在 defaultZone 指定的 eureka 地址。在地址中增加了使用者名稱和密碼。
沒有安全控制之前的地址為

http://localhost:3000/eureka/
複製程式碼

加了安全控制之後的地址為

http://test:123456@localhost:3000/eureka/
複製程式碼

4.服務消費者

服務消費者和服務提供者配置方式一致。

具體的程式碼已經放到 github。點選檢視

Spring Cloud Eureka 實現安全控制

相關文章