SpringCloud元件:你的Eureka服務註冊中心安全嗎?
在之前的章節我們講到了SpringCloud元件:搭建Eureka服務註冊中心,已經可以讓我們自定義的微服務節點
進行註冊到該Eureka Server
上,不過在註冊過程中存在一個風險的問題,如果我們的Eureka Server
的地址無意暴露在外,那豈不是通過Eureka
協議建立的任意服務
都可以進行註冊到該Eureka Server
嗎?(當然如果你配置了伺服器的安全組
並且使用內網的IP地址
或者主機名
方式對外提供服務註冊地址
幾乎不存在這個問題。)
本章目標
為Eureka Server
穿上安全的外套,我的註冊中心更安全。
構建專案
依然使用idea
開發工具建立一個SpringBoot
專案,在依賴的選擇介面我們新增Eureka Server
Security
相關依賴,pom.xml
配置檔案如下所示:
//...省略部分內容 <dependencies> <!--Eureka服務端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <!--新增安全認證--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> //...省略部分內容
因為我們是用的是Spring Security
作為安全元件,所以在這裡需要新增spring-boot-starter-security
依賴來完成安全相關元件
的自動化配置以及例項化
。
既然依賴已經新增好了,那麼我們怎麼配置安全使用者呢?
開啟註冊中心安全配置
在新增安全配置之前,我們需要把Eureka Server
的配置也一併新增上,如果你對Eureka Server
配置不太瞭解,你可以檢視SpringCloud元件:搭建Eureka服務註冊中心閱讀學習
配置檔案的安全配置
修改application.yml
配置檔案內容,新增安全配置資訊,如下所示:
# 服務名稱 spring: application: name: hengboy-spring-cloud-eureka-security # 安全引數配置 security: user: name: api password: node roles: SERVICE_NODE # eureka配置 eureka: client: service-url: defaultZone: http://localhost:${server.port}/eureka/ fetch-registry: false register-with-eureka: false # 埠號 server: port: 10000
安全相關的內容我們通過spring.security.user
開頭的引數進行配置,對應自動繫結spring-boot-starter-security
依賴內的org.springframework.boot.autoconfigure.security.SecurityProperties
屬性實體類。
在SecurityProperties
的內部類SecurityProperties.User
內我們可以看到已經給我們生成了一個預設的name
以及password
spring.security.user.name
使用者名稱,預設值為user
,配置Spring Security
內建使用記憶體方式儲存
的使用者名稱。spring.security.user.password
使用者對應的密碼,預設值為UUID隨機字串
,配置Spring Security
預設對應user
使用者的密碼,該密碼在系統啟動時會在控制檯列印
,如果使用預設值可以執行檢視控制檯的輸出內容。
開啟Http Basic 安全認證
舊版本的Spring Security
的依賴是可以在配置檔案內容直接通security.basic.enabled
引數進行開啟basic
認證,不過目前版本已經被廢除
,既然這種方式不可行,那我們就使用另外一種方式進行配置,通過繼承WebSecurityConfigurerAdapter
安全配置類來完成開啟認證許可權,配置類如下所示:
/**
* 開啟Eureka Server安全認證配置
*
* @author:於起宇 <p>
* ================================
* Created with IDEA.
* Date:2018/9/28
* Time:5:42 PM
* 簡書:http://www.jianshu.com/u/092df3f77bca
* 碼雲:https://gitee.com/hengboy
* GitHub:https://github.com/hengyuboy
* ================================
* </p>
*/
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
/**
* 配置安全資訊
* - 禁用csrf攻擊功能
* - 開啟所有請求需要驗證並且使用http basic進行認證
*
* @param http
* @throws Exception
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf()
.disable()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
如果你瞭解Spring Security
那肯定對我們自定義的安全配置類SecurityConfiguration
的內容不陌生,在SecurityConfiguration#configure
方法內,我們禁用了csrf
功能並且開啟所有請求都需要通過basic
方式進行驗證。
到目前為止我們的
Eureka 註冊中心
的安全相關配置已經新增完成,那麼我們的服務在進行註冊時是不是也需要同步修改呢?
答案:肯定以及必須的
不過服務註冊時僅僅是微調,影響不太大,那麼我們下面來看下該怎麼調整。
註冊服務時的安全配置
如果你對怎麼把服務註冊到Eureka Server
不太瞭解,你可以閱讀SpringCloud元件:將微服務提供者註冊到Eureka服務中心來進行學習,
我們只需要修改eureka.client.service-url.defaultZone
配置的連線字串內容即可,下面是修改前後的對比:
// 修改前
# 配置Eureka Server 資訊
eureka:
client:
service-url:
defaultZone: http://localhost:10000/eureka/
// 修改後
# 配置Eureka Server 資訊
eureka:
client:
service-url:
defaultZone: http://api:[email protected]:10000/eureka/
修改後的api:[email protected]
這塊的內容,前面是spring.security.user.name
配置的值,而後面則是spring.security.user.password
配置的值,@
符號後面才是原本之前的Eureka Server
的連線字串資訊。
對於上面的修改是不是很簡單?
這也歸功於Eureka
的設計,安全方面也是netflix
他們在研發過程中考慮到的一點,所以才會可以這麼簡單的整合Spring Security
安全認證。
執行測試
本章的測試流程如下:
- 啟動
Eureka Server
(本章專案)- 訪問
Eureka Server
管理平臺http://localhost:10000
- 輸入使用者名稱
api
以及密碼node
進行登入- 檢視
服務註冊列表
總結
我們本章為Eureka Server
穿上了安全的外套,讓它可以更安全,在文章開始的時候我說到了如果使用內網IP
或者主機名
方式進行服務註冊時是幾乎不存在安全問題
的,如果你想你的服務註冊中心
更新安全,大可不必考慮你的服務註冊方式
都可以新增安全認證。
原始碼位置
與恆宇少年面對面
如果你喜歡
恆宇少年
的相關文章,那麼就去微信公眾號(恆宇少年
)關注我吧!!!
當然你也可以去 SpringCloud碼雲原始碼 專案底部掃描微信公眾號二維碼關注我,感謝閱讀!!!
學習目錄推薦
開源資訊
這段時間一直在編寫開源的相關框架,致力於公司使用的框架升級以及開源計劃,將公司使用到的工具
以及外掛
進行升級重構並且開源。
- 自動分頁外掛
MyBatis-Pageable
是一款自動化分頁的外掛,基於MyBatis
內部的外掛Interceptor
攔截器編寫完成,攔截Executor.query
的兩個過載方法計算出分頁的資訊以及根據配置的資料庫Dialect
自動執行不同的查詢語句完成總數量的統計。
Gitee地址
:https://gitee.com/hengboy/mybatis-pageable
相關推薦
SpringCloud元件:你的Eureka服務註冊中心安全嗎?
在之前的章節我們講到了SpringCloud元件:搭建Eureka服務註冊中心,已經可以讓我們自定義的微服務節點進行註冊到該Eureka Server上,不過在註冊過程中存在一個風險的問題,如果我們的Eureka Server的地址無意暴露在外,那豈不是通過Eu
微服務架構 SpringCloud(三)Eureka(註冊中心集群篇)
ima static ice fff active hostname 需要 lee 分別是 一:集群環境搭建第一步:我們新建兩個註冊中心工程一個叫eureka_register_service_master、另外一個叫eureka_register_service_back
4--SpringCloud搭建高可用的服務註冊中心 1--SpringCloud的服務註冊與發現Eureka 1--SpringCloud的服務註冊與發現Eureka 1--SpringCloud的服務註冊與發現Eureka
我們已經介紹了1--SpringCloud的服務註冊與發現Eureka,其中,主要演示瞭如何構建和啟動服務註冊中心Eureka Server,以及如何將服務註冊到Eureka Server中,但是在之前的示例中,這個服務註冊中心是單點的,顯然這並不適合應用於線上生產環境,那麼下面在前文的基礎上,我們來看看
SpringCloud-Eureka 服務註冊中心搭建--高可用以及負載均衡配置例項
前言: 由於公司使用的分散式框架太老,慢慢轉移使用SpringBoot微服務框架,後臺框架存在很多問題,為了優化底層服務,現採取如下措施: 0、Nexus搭建Maven私服 (集中
十五:Spring Cloud 之Eureka服務註冊中心(HA版)
1. Eureka簡介 2. 程式碼實現 2.1涉及的模組 eureka-server-ha:通過profiles指定不同的埠來模擬多服務例項。 eureka-service:服務提供者 2.2
SpringCloud第二篇 eureka(服務註冊中心)
1.新建一個Spring Cloud的eureka專案 2.具體的pom如下 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"  
Spring Cloud Eureka(四):Eureka 服務註冊中心配置說明
Eureka Client 配置項(eureka.client.*) org.springframework.cloud.netflix.eureka.EurekaClientConfigBean
SpringCloud Eureka服務註冊中心搭建及問題總結
(1)建立SpringBoot工程,命名eureka-server (2)pom檔案引入依賴 <dependency> <groupId>org.springframework.cloud</groupId> <a
SpringCloud——搭建Eureka服務註冊中心
一:Eureka簡介 Eureka和Consul、Zookeeper等類似,是一個使用者服務發現和服務註冊的元件,最開始主要用於亞
Spring Cloud(二):Eureka 服務註冊中心
前言 服務治理 隨著業務的發展,微服務應用也隨之增加,這些服務的管理和治理會越來越難,並且叢集規模、服務位置、服務命名都會發生變化,手動維護的方式極易發生錯誤或是命名衝突等問題。而服務治理正是為了解決這個問題,服務治理是微服務架構中最為核心和基礎的模組,它主要實現各個微服務例項的自動化註冊和發現。 服務註
沒使用Spring Cloud的版本管理導致Eureka服務無法註冊到Eureka服務註冊中心
esc ice 修改 encoding -s put http nag scrip 創建了一個Eureka Server的服務註冊集群(兩個Eureka服務),都能相互註冊,寫了一個Eureka客戶端服務無法註冊到服務發現註冊中心 註冊中心1: 註冊中心2:
SpringCloud(三)Eureka服務註冊與發現《2》(actuator與Eureka自我保護)
1、actuator與註冊微服務資訊完善 1.1、主機名稱:服務名稱修改 1.當前問題:含有主機名或主機ip。 2.修改microservice-provider-dept-8001yml檔案: eureka: client:&nbs
Spring Cloud 中Eureka服務註冊中心的搭建
1:首先在idea上面建立一個Maven工程,命名為Sprng-Boot-eureka-test 建立的Maven工程中的pom檔案如下 2:在建立的Sprng-Boot-eureka-test工程下面新建一個module為eureka-server
初始化Spring Cloud建立Eureka服務註冊中心
bootstrap https 控制臺 depend lee 心跳 git reg iyu 1、新建項目 https://gitee.com/frankawp/vishnu 新建一個git項目 打開git bash git clone https://gitee.co
搭建Spring Cloud Eureka服務註冊中心(二)服務呼叫
上一節我們搭建了單節點的Eureka和一個provide-server的服務,這一次我們再新建立一個consume-server,然後使用RestTemplate實現服務之間的呼叫。 1、建立consume-server服務 服務建立過程就不一一描述了,這裡貼一下appl
Spring Cloud入門:高可用服務註冊中心
文章例項使用的Spring Cloud版本為Finchley.SR1,Spring Boot版本為2.0.4。 1 高可用服務註冊中心 上一節服務註冊與服務發現 中,我們嘗試了服務註冊中心的構建,但在微服務架構這樣的分散式環境中,我們需要充分考慮發生故障的情況,所以在生
4--SpringCloud搭建高可用的服務註冊中心
我們已經介紹了1--SpringCloud的服務註冊與發現Eureka,其中,主要演示瞭如何構建和啟動服務註冊中心Eureka Server,以及如何將服務註冊到Eureka Server中,但是在之前的示例中,這個服務註冊中心是單點的,顯然這並不適合應用於線上生產環境,那麼下面在前文的基礎上,我們來看看
SpringCloud 使用consul作為微服務註冊中心
eureka宣佈閉源,使用consul作為服務註冊中心。 1、parent pom檔案 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"
Spring Cloud Eureka服務註冊中心 單節點搭建(學習總結)
一、前言: 本文主要搭建Spring Cloud Eureka服務註冊中心(單節點),不過一般生產環境都是多節點負載均衡,形成一個服務註冊中心叢集,這樣一個註冊中心崩了不會影響整個系統的執行以及介面的呼叫。本文基於SpringBoot 1.5.2,Spring Cloud
【Spring Cloud】原始碼-Eureka客戶端如何載入Eureka服務註冊中心列表
這部分原始碼涉及到兩個類: 1. com.netflix.discovery.endpoint.EndpointUtils 2. org.springframework.cloud.netflix.eureka.EurekaClientConfigBean 我