zuihou-admin-cloud 2.1 發布,租戶模式支持動態新增數據源 - OS...

2020-11-29 開源中國

今日更新日誌:

新增:

1. 新增認證服務(zuihou-oauth-server:負責登錄、獲取用戶所有權限、資源、菜單等功能)
2. 參照SpringSecurity原理,調整 認證服務登錄、刷新token等 接口相關邏輯
3. 參照SpringSecurity原理,新增 zuihou-security-starter 模塊,實現 URI權限配置 和 鑑權
4. 新增 租戶模式 支持多數據源模式:動態增減數據源,一個租戶一個庫一個數據源
5. 多數據源模式相關代碼和配置,調整成一鍵切換模式
6. 新增多數據源模式完美支持分布式事務(seata 1.0.0) 
7. 新增刪除租戶時,刪除租戶數據和資料庫的接口,並刪除該租戶的數據源
8. 新增記錄在線用戶功能 & 主動T人下線功能

優化:

1. 重寫token生成規則和方法
2. 優化用戶登錄邏輯,根據配置決定是否限制用戶重複登錄、多端登錄。
3. 登錄日誌改成發布事件的方式。
4. 移除 zuihou-shiro-starter 和 zuihou-user-starter 模塊
5. 移除 zuihou-zuul-* 模塊中沒用的幾個模塊
6. 優化swagger配置,支持接口認證等參數
7. 配置文件調整:zuihou.database.bizDatabase -> zuihou.database.tenantDatabasePrefix
8. 將分散在各個服務的枚舉接口(/enums)合併到 Oauth 服務,前端在登錄之後,一次性拉取存放在前端緩存中。
9. 日誌統一存儲路徑: logging.file.path 移動到 src/main/filters/config-dev.properties 統一配置
10. 將租戶模塊相關代碼獨立到權限服務的 zuihou-tenant-** 模塊中,降低代碼耦合度,增強系統的獨立性。(有條件的朋友,完全可以將租戶模塊獨立成一個服務)
11. 將非租戶模式、欄位租戶模式、SCHEMA/數據源租戶模式的資料庫腳本區分開。
12. 簡化租戶後臺系統相關接口邏輯 (zuihou-admin-ui)
13. 廢除之前的配置在Controller層的聲明式事務配置,採用註解配置事務,調整事務控制到service層,通過註解來控制事務,原因是兼容多數據源模式。
14. SuperCacheServiceImpl 相關方法加上事務註解。
15. SuperCacheServiceImpl 相關操作緩存的方法去除@Cache註解,採用cacheChanel方式,防止子類this調用時,無法使用緩存的bug
16. 拆分上下文攔截器,將租戶信息、MDC分離到 攔截器TenantContextHandlerInterceptor(封裝租戶相關請求頭)、MdcHandlerInterceptor(封裝日誌相關線程變量)
17. 優化操作日誌相關配置,實現根據條件實例不同的bean
18. 簡化order和demo服務的分布式事務配置 
19. SpringUtils類增加發布事件的靜態方法
20. 廢棄IgnoreTokenConfig,調整為配置文件方式: IgnoreTokenProperties

修復:

1. 修復UserQuery構造方法報NPE的bug  # fix I1BXPW
2.修復個人中心修改資料的bug   # fix I1CIEN
3. 完善租戶模塊相關功能,並修復一個弱智bug

 

升級指南:

1. 更新 zuihou-admin-cloud, 待依賴更新完畢後,根據IDEA提示,刪除zuihou-zuul-base、zuihou-zuul-authentication、zuihou-zuul-ratelimit 等模塊
2. 若要更新zuihou-commons(該項目已經發布中央倉庫,若不想看源碼,可以不用管),待依賴更新完畢後,根據IDEA提示,刪除zuihou-user-starter、zuihou-shiro-starter等模塊
3. 編譯項目
4. 重新導入 資料庫腳本      (資料庫改動較大,請務必重新執行,執行時,看著: docs/sql/腳本說明.md 根據自身情況導入腳本)
5. 重新導入 nacos 配置文件  (配置文件改動很大,刪除合併了很多配置)
6. 啟動項目

租戶模式:

租戶模式 描述 優點 缺點 分布式事務
NONE(非租戶模式)  沒有租戶 簡單、適合獨立系統 缺少租戶系統的便利性 支持
COLUMN(欄位模式) 租戶共用一個資料庫,在業務表中增加欄位來區分   簡單、不複雜、開發無感知  數據隔離性差、安全性差、數據備份和恢復困難 支持
SCHEMA(獨立schema)  每個租戶獨立一個 資料庫(schema),執行sql時,動態在表名前增加schema 簡單、開發無感知、數據隔離性好 配置文件中必須配置資料庫的root帳號、不支持複雜sql和 sql嵌套自定義函數 存在bug
DATASOURCE(獨立數據源)  每個租戶獨立一個 資料庫(數據源),執行代碼時,動態切換數據源 可獨立部署資料庫,數據隔離性好、擴展性高、故障影響小 相對複雜、開發需要注意切換數據源時的事務問題、需要較多的資料庫 支持

簡介:


基於`SpringCloud(Hoxton.SR1)`  + `SpringBoot(2.2.5.RELEASE)` 的 SaaS型微服務腳手架,具備用戶管理、資源權限管理、網關統一鑑權、Xss防跨站攻擊、自動代碼生成、多存儲系統、分布式事務、分布式定時任務等多個模塊,支持多業務系統並行開發,支持多服務並行開發,可以作為後端服務的開發腳手架。代碼簡潔,架構清晰,非常適合學習使用。核心技術採用Nacos、Fegin、Ribbon、Zuul、Hystrix、JWT Token、Mybatis、SpringBoot、Seata、Nacos、Sentinel、RabbitMQ、FastDFS等主要框架和中間件。

希望能努力打造一套從 SaaS基礎框架 - 分布式微服務架構 - 自動化部署 - 系統監測 的解決方案。本項目旨在實現基礎能力,不涉及具體業務。
 

功能點介紹:

服務註冊與調用:

基於Eureka來實現的服務註冊與調用,在Spring Cloud中使用Feign, 我們可以做到使用HTTP請求遠程服務時能與調用本地方法一樣的編碼體驗,開發者完全感知不到這是遠程方法,更感知不到這是個HTTP請求。

 服務鑑權:

通過JWT的方式來加強服務之間調度的權限驗證,保證內部服務的安全性。

負載均衡:

將服務保留的rest進行代理和網關控制,除了平常經常使用的node.js、nginx外,Spring Cloud系列的zuul和ribbon,可以幫我們進行正常的網關管控和負載均衡。其中擴展和借鑑國外項目的擴展基於JWT的Zuul限流插件,方面進行限流。

 熔斷機制:

因為採取了服務的分布,為了避免服務之間的調用「雪崩」,採用了Hystrix的作為熔斷器,避免了服務之間的「雪崩」。

監控:

利用Spring Boot Admin 來監控各個獨立Service的運行狀態;利用turbine來實時查看接口的運行狀態和調用頻率;通過Zipkin來查看各個服務之間的調用鏈等。

數據權限:

利用基於Mybatis的DataScopeInterceptor攔截器實現了簡單的數據權限

SaaS的無感解決方案:

使用Mybatis攔截器實現對所有SQL的攔截,修改默認的Schema,從而實現多租戶數據隔離的目的。

二級緩存:

採用J2Cache操作緩存,第一級緩存使用內存(Caffeine),第二級緩存使用 Redis。 由於大量的緩存讀取會導致 L2 的網絡成為整個系統的瓶頸,因此 L1 的目標是降低對 L2 的讀取次數。 該緩存框架主要用於集群環境中。單機也可使用,用於避免應用重啟導致的緩存冷啟動後對後端業務的衝擊。

優雅的Bean轉換:

採用Dozer組件來對 DTO、DO、PO等對象的優化轉換

前後端統一表單驗證:

嚴謹的表單驗證通常需要 前端+後端同時驗證, 但傳統的項目,均只能前後端各做一次檢驗, 後期規則變更,又得前後端同時修改。 故在hibernate-validator的基礎上封裝了zuihou-validator-starter起步依賴,提供一個通用接口,可以獲取需要校驗表單的規則,然後前端使用後端返回的規則, 以後若規則改變,只需要後端修改即可。

防跨站腳本攻擊(XSS):

  •      通過過濾器對所有請求中的 表單參數 進行過濾
  •      通過Json反序列化器實現對所有 application/json 類型的參數 進行過濾

當前用戶信息注入器:

 通過註解實現用戶身份注入

在線API:

由於原生swagger-ui某些功能支持不夠友好,故採用了國內開源的 knife4j ,並製作了stater,方便springboot用戶使用。

代碼生成器:

基於Mybatis-plus-generator自定義了一套代碼生成器, 通過配置資料庫欄位的注釋,自動生成枚舉類、數據字典註解、SaveDTO、UpdateDTO、表單驗證規則註解、Swagger註解等。

定時任務調度器:

基於xxl-jobs進行了功能增強。(如:指定時間發送任務、執行器和調度器合併項目、多數據源)

漢化 Eureka 註冊中心頁面:

請切換分支進行查看

大文件/斷點/分片續傳:

前端採用webupload.js、後端採用NIO實現了大文件斷點分片續傳,啟動Eureka、Zuul、File服務後,直接打開docs/chunkUploadDemo/demo.html即可進行測試。 經測試,本地限制堆棧最大內存128M啟動File服務,5分鐘內能成功上傳4.6G+的大文件,正式服耗時則會受到用戶帶寬和伺服器帶寬的影響,時間比較長。

分布式事務:

集成了阿里的分布式事務中間件:seata,以 高效 並且對業務 0侵入 的方式,解決 微服務 場景下面臨的分布式事務問題。

灰度發布:
    
為了解決頻繁的服務更新上線,版本回退,快速迭代,公司內部協同開發,本項目採用修改ribbon的負載均衡策略來實現來灰度發布。     

關聯數據自動注入:

用於解決跨表、跨庫、跨服務分頁數據的屬性或單個對象的屬性 回顯關聯數據之痛, 支持對靜態數據屬性(數據字典)、動態主鍵數據進行自動注入。

項目代碼地址

演示地址 (演示帳號沒有寫權限,只能查詢)

項目 演示地址 管理員帳號 普通帳號
租戶後臺 http://tangyh.top:10000/zuihou-ui zuihou/zuihou test/zuiou
開發&運營後臺 http://tangyh.top:180/zuihou-admin-ui demoAdmin/zuihou

相關焦點

  • CatchAdmin V2.2 版本常規更新
    CatchAdmin是一款基於thinkphp framework和 element admin二次開發而成後臺管理系統。因為 thinkphp 的簡單高效,文檔齊全。更新 新增方法權限認證標識 更新獲取數據權限,默認獲取角色 修復當前用戶無模塊權限時,卻在模塊列表顯示了全部模塊 後臺整體樣式調整, 由 @talentm 提供 新增選擇上傳附件,可從附件列表中選擇附件
  • SmartDb 1.0.0 發布,支持多資料庫、多數據源、讀寫分離的極速...
    特性如下: 支持ORM操作、常見增刪改查、批量、分頁等功能 支持MySQL、Oracle、Postgresql、SqlServer 支持在mybatis、hibernate等項目上引入SmartDb 支持多數據源 支持分寫分離 支持枚舉Enum映射 支持Spring和Spring事務 支持SQL鏈式API 支持代碼生成 支持 filter 過濾器
  • CatchAdmin v2.4 發布,迭代更新
    CatchAdmin是一款基於thinkphp framework和 element admin二次開發而成後臺管理系統。因為 thinkphp 的簡單高效,文檔齊全。更新 創建 Class 新增 when 方法 更新個人信息校驗郵箱唯一性 新增用戶 token 欄位 強制 JWT 版本依賴,防止 JWT 版本問題導致登錄失敗 fixed
  • Android QQ 6.6.6正式版發布 新增紅包動態封面
    感謝N軟網的投遞騰訊手機版Android QQ v6.6.6昨日晚間正式發布,上一個正式版發布於
  • 初識Spring Cloud Stream,什麼是消息驅動微服務框架
    不過 Spring Cloud Stream 目前只支持 RabbitMQ 和 Kafka 這兩個消息中間件的自動化配置。相關知識點解讀「1. 什麼是事件驅動架構?」常見的企業集成數據傳遞模式有以下幾種:文件傳輸:系統A採用FTP輪詢等方式獲取系統B生成的文件等。共享資料庫:系統A和系統B共用一個資料庫表,共用實體類。RPC調用:系統A和B暴露互相之間能調用的服務,例如SOAP、REST。消息傳遞:系統A和系統B通過消息中間價交換數據。
  • 瑞星發布下一代網絡版殺毒軟體 多維度保障終端安全
    隨著NAS網盤、企業分布式存儲的普及,數據文件的存儲越來越多不在本地。各種數據防洩密dlp方案的應用,本地數據越來越多的被保護起來,傳輸可以做加密、存儲可以在雲端、數據可以加保護,但是一切的一切終究要落地到實實在在的終端去使用,所以只有真正應用的終端位置才可能感知、分析、處理到威脅。
  • 小說精品屋 - plus v3.3.0發布,支持前端多模版自定義
    小說精品屋-plus v3.3.0 發布了,主要改進包括:更新1. 項目結構調整,新增多模版自定義功能,天然支持站群。
  • DB-Engines:2017年1月全球資料庫排名TOP 20 | 網際網路數據資訊網...
    Oracle12cOracle12c是一個非常重要的版本,相比11g,在設計理念上有了全新的變化,全面擁抱雲計算,多租戶是12c的最大特性。按Oracle以前產品的發布來看,大版本的第一個版本更多是布道,而第二個版本更具有大規模生產使用價值。2016年發布了12.2版本,12c可以說能進入生產使用階段。
  • 百度物可視仿真數據源:只需四步,帶你「以假亂真」
    背景很多次只是想體驗一下"物可視"的報表設計功能,卻發現沒有購買 TSDB 等付費數據源?很多次想設計出動態更新的報表,卻發現手頭只有 CSV 靜態數據源?"仿真數據"是繼"時序資料庫"、"設備影子"、"靜態數據"之後物可視提供的第 4 種數據源接入能力:通過調整"仿真數據"豐富的配置參數,將得到一個可用於數據處理、綁定圖標的物可視數據源:創建完成後,"仿真數據"和其他數據源一樣,出現在"數據表"列表中,並可對其進行各種數據處理操作:新建列、列排序等。怎麼使用"仿真數據"?
  • 更多支持HDMI 2.1的產品投入市場 為受眾帶來先進的消費娛樂功能
    超高速HDMI線纜現已推出,實現端到端HDMI 2.1安裝2021年1月6日加利福尼亞聖何西 /美通社/ -- 繼 HDMI 規範 2.1 版本發布後的三年間,支持 HDMI 2.1 功能的各類主要產品現已普及,包括 4K@120Hz、8K@60Hz、動態 HDR 和 eARC。
  • 搜狗瀏覽器2.0 beta版發布 新增可樂米皮膚
    首頁 > 動態 > 關鍵詞 > 2.0最新資訊 > 正文 搜狗瀏覽器2.0 beta版發布 新增可樂米皮膚
  • 2018 年度新增開源軟體排行榜之國產 TOP 50
    2018 年開源中國社區「新增」開源軟體排行榜之國產 TOP 50 終於發布了!
  • kkFileView v2.1.0 發布,文件文檔在線預覽解決方案
    提供zip/tar.gz發行包、自定義配置文件、和啟動/停止腳本等,極大方便部署使用,同時官方發布Docker鏡像,方便容器環境中部署使用。基本支持主流辦公文檔的在線預覽,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,7z,mp3,mp4,flv圖片等等。
  • O2OA V4.1921 發布! 支持麒麟、國產資料庫
    AGPL協議開放原始碼的企業信息化系統需求定製開發解決方案,對外提供專業的開發運維等技術服務。支持自定義欄目、分類,表格,表單,多級權限系統,能輕鬆實現知識管理、通知公司、規章制度、文件管理等內容發布系統。門戶管理:具體可視化表單編輯的,支持HTML直接導入的,支持各類數據源,外部應用集成能力的,所見即所得的門戶管理平臺。適用於實現企業信息化門戶系統,可以輕鬆結合O2OA提供的認證設置與其他系統進行單點認證集成。
  • mbed-os 5.13.2 發布,來自 ARM 的物聯網作業系統
    mbed-os 5.13.2 發布了,ARM® mbed™ IoT 設備平臺提供了作業系統、雲服務、工具和開發人員體系,以便能夠大規模創建和部署基於標準的商業 IoT 解決方案。
  • Taro 3.1 beta 發布:開放式架構新增 4 端支持
    面對小程序平臺越來越多的大環境,Taro 是選擇偏安一隅,只支持部分的主流小程序,還是成為所有小程序平臺開發、多端轉換的基礎設施,我們在 v3.1 給出了答案:開放式架構。封裝的過程中,我們檢索了各小程序最新的組件、API,並全數進行更新與支持,對齊各小程序最新的能力。2. 新增支持轉換的平臺藉助開放式架構,我們編寫了若干端平臺插件,開發者安裝後即可使用:對開發者的影響沒有影響,改動屬於 Taro 內部架構重構,不會影響開發者使用。
  • 大疆靈眸 Pocket 2 雲臺相機固件更新:新增 HDR 錄像與耳機監聽等...
    IT之家1月10日消息 大疆於 1 月 8 日發布了靈眸 Osmo Pocket 2 雲臺相機 V 01.01.00.50 版本固件更新,新增多項新功能。這款雲臺相機小巧便攜,搭載 1/1.7 英寸 6400 萬像素傳感器,支持 4K/60fps 視頻拍攝。
  • 小米手環 5 支持小米穿戴 App 綁定,不支持血氧飽和度檢測
    IT之家6月11日消息 今天下午,小米手環 5 正式發布。小米手環5搭載了1.1英寸動態彩顯大屏,支持100+款主題錶盤,擁有11種專業運動模式,支持14天超長續航+磁吸充電。小米手環 5 標準版 189元,NFC版 229元,6月18日早 10 點,全渠道開售。
  • 通過CF Partner設置你的域名cname使用CloudFlare的CDN
    的cname記錄www.itkylin.com3.1)因為是測試,暫時沒時間登陸伺服器搭建LNMP環境和部署CFWEB管理界面了,所以使用方式一,直接隨便在一臺vps上wget下cloudflare-partner-cli.py腳本文件用python執行就可以了。