前言
距離上一篇部落格《關於技術人員自身能力提高的一些思考》已經相隔將近一個月,現在才去更新博文,一方面工作上面確實有點忙,另外一方面自己也可能真的最近有所鬆懈。老貓也就不去找說辭了。
上次釋出博文之後,網友反響其實還是挺大的,每個人都有自己的看法。大概是這樣的,老貓擷取了其中一些網友的留言。
其實從上面的留言裡面可以看到兩種意見,第一種,贊成學習研究技術,主要目的作為知識儲備。一旦用到,重新翻看學習的成本會比較低,即使忘記了。第二種,贊成通過實際的開源專案去實踐相關的技術,這樣才會更加深刻。
後來老貓想了想還是決定綜合以上兩種意見,首先業餘時間做個開源的專案出來,另外的話同時也把裡面的相關的技術點也細扣一下,然後分享給大家。
為什麼是許可權系統?
思來想去不曉得以什麼樣的開源系統作為切入會比較好,作為一個後端程式設計師,我們接觸最多的就是我們的後端系統,當然最基礎的話還是許可權系統。當然這是老貓選擇許可權系統的第一個原因。
基礎的許可權系統完成之後,其實也可以在此之上擴充一些其他的業務出來,其實老貓也同時在預謀另外一個產品,在此先賣個關子,老貓後續會公開,所以歡迎大家持續關注老貓。這是第二個原因。
將近畢業季,相信很多軟體學院的學生黨還在苦苦糾結於做個怎樣的畢業設計。所以在此,老貓也希望能給大家一些思路,或者說給一個比較簡單而又擴充性比較強的模板,大家可以拿去自行擴充自己的想法,程式碼整體的學習成本並不是很高。這是其三。
老貓是後端程式設計師,對於前端只能說會用,並不精通,更不用說自己去開發出漂亮的前端頁面,但是後端系統的vue相關的系統頁面有很多現成的開原始碼,用來做系統都非常漂亮,可以直接拿來做系統,當然最簡單就是許可權系統了,這是其四。
這就是以上四點老貓決定總許可權系統入手的原因。
決定選擇什麼樣的技術棧?
所有的系統都是從單體架構開始的,由於業務比較簡單,所以老貓剛開始的時候先不考慮微服務,後面老貓在進行需求擴充套件的時候再去做相關的微服務改造。但是老貓這次的許可權系統還是做成前後端分離的模式,主要思路就是shiro+jwt+vue去實現相關的登入許可權功能。
關於企業級的登入以及許可權驗證的話市面上有比較成熟的開源框架,一般會有這兩個,分別是spring security以及shiro。
聊聊兩大安全框架,以及最終選型
聊聊兩者的共同功能,兩者都具有:
(1)認證功能(2)授權功能(3)加密功能(4)會話管理(5)快取支援 (6)rememberMe功能。
看看不同點:
1、Spring Security 基於Spring 開發,依賴spring容器,專案若使用 Spring 作為基礎,配合 Spring Security 做許可權更加方便。Shiro 依賴性低,不需要任何框架和容器,可以獨立執行,所以這就導致 Shiro 需要和 Spring 進行整合開發;
2、Spring Security 功能比 Shiro 更加豐富些(據說控制粒度可以更細),另外的Spring Security對Oauth、OpenID有支援,然而shiro需要手動去實現 ;
3、Spring Security 社群資源相對比 Shiro 更加豐富;Spring Security對Oauth、OpenID也有支援,Shiro則需要自己手動實現。而且Spring Security的許可權細粒度更高,spring security 介面 RequestMatcher 用於匹配路徑,對路徑做特殊的請求,類似於shiro的抽象類 PathMatchingFilter,但是 RequestMatcher 作用粒度更細
4、Shiro 簡單,易用,功能也強大,Spring Security 上手複雜些;
5、shiro 不僅僅可以使用在web中,還支援非web專案它可以工作在任何應用環境中。在叢集會話時Shiro最重要的一個好處或許就是它的會話是獨立於容器的。
綜上,雖然spring security看起來比shrio更加強大,另外還有shiro所不具備的對Oauth、OpenID的支援,但是這些都不是關鍵。談到許可權的控制粒度,shiro完全可以通過資料庫的查詢層面去做掉。關於Oauth以及OpenID支援。由於是web應用,所以現租戶與各個產品間單點登入已經通過cookies實現。另外的最大的原因的話主要還是shiro相對而言更加容易上手一些。不得不提一嘴的是 SpringSide網站的許可權也是用Shrio做的。
所以結論就很明顯了,老貓還是決定用shiro去做許可權認證。
寫在最後
勿以善小而不為,複雜的業務系統總是從最簡單的系統開始。基礎的技術千篇一律,有趣的系統演化百裡挑一。所以與其死啃乾貨,不如從系統真實去實戰,just do it !,just do it ! 所以接下來開始,希望大家就和老貓共同開啟開源之旅了。在開源中成長,在開源中去結合實際場景學習一些新的知識。flow me!