本文項目代碼:
服務端:
https://github.com/lining90567/dubbo-demo-server前端:
https://github.com/lining90567/dubbo-demo-client最近項目中使用了shiro做權限管理,在開發過程中也踩了一些坑,于是便有了開發個應用鞏固一下所學知識的想法,正好在開發的過程裡學習一下Vue開發。
技術棧方面,現在前後端分離大行其道,于是也采用了前後端分離的模式,前端基于Vue+Element,後端Web基于Spring MVC,用Dubbo提供分布式服務,前端可以部署到nginx,後端Web可以部署到Tomcat、Jetty或Undertow等Servlet容器,Dubbo服務可以作為獨立的java程序運作,這種架構下,各層都比較容易實作橫向擴充,可以根據業務量靈活調節。
分布式服務基于Dubbo架構開發,業務邏輯的實作在該層完成。Dubbo可以和Spring完美內建,其服務注冊與發現機制保證了服務的健壯性和伸縮性,其監控中心可以記錄服務的運作情況和調用次數,可以根據監控資料做出服務執行個體的增減決策。
Web服務提供前端調用的RESTful api,并負責每次調用的身份認證和鑒權,由于是前後端分離結構,Web端為無狀态設計,使用JWT實作身份認證,基于Shiro編寫RESTful過濾器實作鑒權(在實際開發中發現shiro自帶的rest過濾器在無狀态web環境下會有問題),身份認證和鑒權成功後,調用Dubbo的rpc服務完成業務邏輯。
前端基于Vue+Element開發,用vue-router根據使用者權限實作動态路由,進而在沒有權限的情況下即使在浏覽器中輸入url,也無法調用權限外的功能,用axios調用RESTful API,在header中攜帶JWT,Web服務根據該Token驗證使用者的身份和權限。
項目代碼: