經過1周的原始碼研究,終於對shiro的原理有了深刻的理解,基於原理我們識別出生產環境落地這個技術的設計複雜度
shiro落地的設計複雜度:
(1)自定義cachingsessiondao,這是核心,因為它儲存了session,principals,authenticationstate等所有可以持久化的資料。
(2)sessionid無狀態化設計:我們就可以通過繼承defaultwebsessionmanager,自定義getsessionid邏輯實現無狀態的會話,而不需要依賴cookie來獲取session.,此方案登陸成功後必須把sessionid傳給客戶端。
(3)登陸成功後最好初始化session:
session session = subject.getsession();//初始化會話
(4)其他:shiro擴充套件:自定義authorizingrealm,sessionfactory,******session,過濾器,sessionlisteneradapter等等,這些都是基本操作,不重要,初級水平的開發都能理解。
(5)典型應用:單點登陸(登陸認證、登出,驗證token)--特殊的認證,
單點登陸增加的設計複雜度:
-->增加登陸介面
-->登陸成功,跨域重定向(cors方案即可)
(6)備選方案1:spring security
(7)備選方案2:自己實現3類介面即可,不需要什麼鬼框架,增加學習成本。。
-->使用者登陸認證介面
-->使用者許可權查詢和校驗介面 (結合自定義註解+自定義過濾器實現許可權過濾)
-->session的儲存,更新,刪除介面
演算法的複雜度 時間複雜度與空間複雜度
通常,對於乙個給定的演算法,我們要做 兩項分析。第一是從數學上證明演算法的正確性,這一步主要用到形式化證明的方法及相關推理模式,如迴圈不變式 數學歸納法等。而在證明演算法是正確的基礎上,第二步就是分析演算法的時間複雜度。演算法的時間複雜度反映了程式執行時間隨輸入規模增長而增長的量級,在很大程度上能很...
前端開發設計的時間複雜度和空間複雜度
時間複雜度 function gettime n return sum 時間複雜度為 o 2n 2 因為係數 常熟對 n 的增長規模沒有影響 不需要考慮,可以忽略 所以時間複雜度為 o n 如果一段 中沒有迴圈 遞迴等語句,通常時間複雜度都是o 1 function gettime n 這種成倍數的...
演算法的複雜度 演算法的時間複雜度和空間複雜度
在一次筆試題目中,發現了自己對於演算法的時間複雜度問題上並沒有完全清晰這個概念和計算方法,故上網尋找到比較好的詳細介紹來學習。演算法的時間複雜度和空間複雜度合稱為演算法的複雜度。1.時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也...