天天看點

幹貨 | 微服務架構下 Spring Cloud OAuth2 通用權限管理系統

作者:王傑
幹貨 | 微服務架構下 Spring Cloud OAuth2 通用權限管理系統

項目位址

Gitee: https://gitee.com/log4j/pig

Github位址失效上Gitee: https://github.com/pig4cloud/pig

示範環境: http://pigx.pig4cloud.com

關于作者: https://gitee.com/gitee-stars/15

Pig Microservice Architecture

  • 基于 Spring Cloud Greenwich 、Spring Security OAuth2 的RBAC權限管理系統 (Zuul 版本參考 1.x 分支)
  • 基于資料驅動視圖的理念封裝 Element-ui,即使沒有 vue 的使用經驗也能快速上手
  • 提供對常見容器化支援 Docker、Kubernetes、Rancher2 支援
  • 提供 lambda 、stream api 、webflux 的生産實踐

1. 項目核心

  • 一個注解接入OAuth 2.0 認證。 借助spring security 完成企業級權限設計,杜絕重複造輪子
  • 讓更多的微服務耳熟能詳的名次,比如灰階釋出、流量控制、動态路由等不僅存在于PPT,通過Spring Cloud 作為載體實作
  • 幾行代碼完成Vue 的CRUD。 運用layui、easyui 資料驅動視圖的理念封裝,讓後端工程師無縫上手

2. 資源伺服器接入

  • 一個EnablePigResourceServer 注解 即可接入oauth2 伺服器,權限管理被spring security接管。相較于原生的spring security oauth2 複雜的配置,EnablePigResourceServer 完成了資源伺服器的全部功能 及其整合注冊中的負載均衡

3. 服務端動态路由

動态路由需要達到可持久化配置,動态重新整理的效果。不僅要能滿足從spring的配置檔案properties加載路由資訊,還需要從資料庫加載我們的配置。另外一點是,路由資訊在容器啟動時就已經加載進入了記憶體,我們希望配置完成後,實施釋出,動态重新整理記憶體中的路由資訊,達到不停機維護路由資訊的效果,無論是zuul,還是spring cloud gateway 都提供了實作.通過記憶體 + Redis 的二級緩存政策讓性能更加高效

幹貨 | 微服務架構下 Spring Cloud OAuth2 通用權限管理系統

4. 單點登入

單點登入是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,使用者隻需要登入一次就可以通路所有互相信任的應用系統。pig 1.X 分支基于 Spring security oauth 也提供了生産實踐

幹貨 | 微服務架構下 Spring Cloud OAuth2 通用權限管理系統

5. 灰階釋出

通過用戶端聲明的不同版本,可以通過網關進行轉發到不同版本的業務微服務,實作生産不停機的灰階釋出,保障服務的高可用。

幹貨 | 微服務架構下 Spring Cloud OAuth2 通用權限管理系統

6. 多元度限流

zuul版本整合spring-cloud-zuul-ratelimit,gateway版本是原生擴充

目前支援的限流粒度

1.服務粒度 (預設配置,目前服務子產品的限流控制)

2.使用者粒度 (詳細說明,見文末總結)

3.ORIGIN粒度 (使用者請求的origin作為粒度控制)

4.接口粒度 (請求接口的位址作為粒度控制)

7. 分庫分表

zuul版本.采用現在 Sharding-JDBC實作分庫分表。主要業務場景是對日志表進行安裝ID hash 進行拆分,避免生産大資料量存儲問題。在Java的JDBC層以對業務應用零侵入的方式額外提供資料分片,讀寫分離,柔性事務和分布式治理能力。

8. 前端解決方案,資料驅動視圖

  • 隻需要的配置每列屬性即可完成入上圖 令牌管理CRUD,是不是很神奇? 下邊對兩種寫法進行對比,讀者可以從代碼量中比較出差異,實作的效果完全一緻,讓規則資料可以直接可視化。

項目截圖

幹貨 | 微服務架構下 Spring Cloud OAuth2 通用權限管理系統
幹貨 | 微服務架構下 Spring Cloud OAuth2 通用權限管理系統

9. 總結

  1. Pig 1.0 已經在多家公司内部生産運作,各方面表現還不錯。提供了從開發到生産的整套解決方案
  2. Pig 2.0 聚焦瘦身減少中間件的引入,目的是讓更多人快速以pig入門Spring Cloud 提供完整的元件鍊,快速上手。
  3. 限于篇幅以上隻是對部分功能進行說明,歡迎大家交流學習

以下專題教程也許您會有興趣

  • 《Spring Boot 2.x 系列教程》 https://www.bysocket.com/springboot
  • 《Java 核心系列教程》 https://www.bysocket.com/archives/2100
由于能力有限,若有錯誤或者不當之處,還請大家批評指正,一起學習交流!

-The End-

号外:為讀者持續幾份最新教程,覆寫了 Spring Boot、Spring Cloud、微服務架構等。

擷取方式:下面關注公衆号,并回複 java 或 666 領取

最新整理:下面關注公衆号,并回複 webflux 或 888 領取《Spring Boot WebFlux 必會必知系列教程》

推薦号主