暢購商城(八):微服務閘道器和JWT令牌(轉載)
阿新 • • 發佈:2020-08-05
好好學習,天天向上
本文已收錄至我的Github倉庫DayDayUP:github.com/RobodLee/DayDayUP,歡迎Star,更多文章請前往:目錄導航
- 暢購商城(一):環境搭建
- 暢購商城(二):分散式檔案系統FastDFS
- 暢購商城(三):商品管理
- 暢購商城(四):Lua、OpenResty、Canal實現廣告快取與同步
- 暢購商城(五):Elasticsearch實現商品搜尋
- 暢購商城(六):商品搜尋
- 暢購商城(七):Thymeleaf實現靜態頁
- 暢購商城(八):微服務閘道器和JWT令牌
微服務閘道器
介紹
閘道器是介於使用者和微服務之前的中間層。說白了,閘道器就像是小區的保安,無論你想到小區的哪一戶人家去,你都得先通過小區的大門。所以,小區的保安可以做人員統計,還可以控制某個時間段進去小區的人數,限制進入小區的資格等。保證了小區業主們的安全。微服務網關同樣起著這些作用。
為什麼要有微服務閘道器
不同的微服務一般會有不同的網路地址,而外部客戶端可能需要呼叫多個服務的接口才能完成一個業務需求,如果讓客戶端直接與各個微服務通訊,會有以下的問題:
- 客戶端會多次請求不同的微服務,增加了客戶端的複雜性
- 存在跨域請求,在一定場景下處理相對複雜
- 認證複雜,每個服務都需要獨立認證
- 難以重構,隨著專案的迭代,可能需要重新劃分微服務。例如,可能將多個服務合併成一個或者將一個服務拆分成多個。如果客戶端直接與微服務通訊,那麼重構將會很難實施
- 某些微服務可能使用了防火牆 / 瀏覽器不友好的協議,直接訪問會有一定的困難
那麼有了微服務閘道器之後,這些問題就可以得到解決。它有著以下優點。
- 安全 ,只有網關係統對外進行暴露,微服務可以隱藏在內網,通過防火牆保護。
- 易於監控。可以在閘道器收集監控資料並將其推送到外部系統進行分析。
- 易於認證。可以在閘道器上進行認證,然後再將請求轉發到後端的微服務,而無須在每個微服務中進行認證。
- 減少了客戶端與各個微服務之間的互動次數
- 易於統一授權。
總結:微服務閘道器就是一個系統,通過暴露該微服務網關係統,方便我們進行相關的鑑權,安全控制,日誌統一處理,易於監控的相關功能。
閘道器微服務
微服務搭建
一個專案中可能會用到不止一個閘道器,所以我們將閘道器微服務放在changgou-gateway父工程下。現在我們建立一個名為changou-gateway-web的微服務。有些依賴是所有閘道器微服務都要用到的,所以將這些依賴放在父工程下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
啟動類和配置檔案不能少,啟動類就不貼了,配置檔案如下