裝飾器模式(decorator pattern)允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。在微服務架構的專案中做認證模組,涉及到分布式session共享問題2這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。1
。
。。關於分布式下session共享問題,如下:
1、乙個是同乙個服務,做了集群,都處於同乙個網域名稱下,如何解決session共享問題。
2、不同的服務,擁有不同的子網域名稱,相對于父網域名稱,如何解決cookie儲存的域問題(瀏覽器中cookie的domain)。
針對上面兩個問題,有多種解決方案,但各種解決方案都有一定的弊端。
針對問題1
方案一,可以採用session複製來解決,tomcat原生支援。
方案二,session的資訊轉向客戶端儲存,這肯定是不能採用的。
方案三,hash一致性,hash一致性是在雜湊演算法的基礎上演進的,是為了確保在節點增加或刪除的情況下,保證客戶端還能訪問到其對應節點中的session資料。
方案四,統一儲存,利用redis進行儲存。
最後採用了方案四解決了session的儲存問題,但是如何解決問題2,不同子域的客戶端瀏覽器可以共享同乙份cookie呢,那就是把cookie的domain由預設的當前網域名稱改為父網域名稱,如auth.gulimall.com改為gulimall.com,這樣就可以使同乙個瀏覽器的不同子域擁有同乙份cookie
。那如果改變伺服器返回cookie中的domain呢,這就需要使用到spring session了,使用spring session統一管理分布式下的session。
通過了解spring session的原理,可以發現,其實現方式就是採用了裝飾者模式,在不改變原有物件的結構下,通過包裝對原物件進行新增功能。
[1] 菜鳥教程
[2] 穀粒**高階篇的認證模組涉及到spring session
Spring Session 會話管理
2.session會話管理及帶來的問題 3.session會話共享方案 2.使用session 先不使用spring session restcontroller public class setsessioncontroller restcontroller public class getses...
spring session使用日誌
請求進入和退出時,filter觸發session的提取和儲存 getattribute時會查詢資料庫 setattribute會儲存到資料庫 daemond執行緒定時自動刪除過期的session spring session只提供了自動提取和維護session的功能,基於session的許可權校驗需...
spring session使用配置redis
1.新增依賴 dependency groupid org.springframework.session groupid artifactid spring session data redis artifactid version 1.2.0.release version dependency...