shiro框架---关于多项目之间验证为什么需要共享session
關(guān)于多項目之間登錄驗證為什么需要共享session
服務(wù)器上部署了兩個項目,登錄之后才可以訪問其中的接口。現(xiàn)在想要實現(xiàn),當(dāng)?shù)卿涰椖?成功后,可以不需要再登錄項目2,直接可以訪問項目2中的接口。
大部分人都會想到,共享session ,但是為什么是共享session 呢?
一、為什么需要共享session
以shiro 框架作為登錄驗證權(quán)限框架 為例,這里還不寫這個,先說為什么需要共享session ,正常情況的時候,是如下圖:
如上圖描述,每個項目中shiro 都維護(hù)了自己的sessionid與session的關(guān)系 ,它們之間不共享。
上圖兩個項目中切換請求必然會有如下的步驟:
1、sessionId串的生成
瀏覽器首次對項目1發(fā)起請求時,項目1 會為當(dāng)前請求創(chuàng)建一個session ,根據(jù)session 生成一個sessionId 字符串,該sessionId串 與創(chuàng)建的session 維護(hù)著一個關(guān)聯(lián)關(guān)系。
2、sessionId串存到cookie中
后臺將該sessionId串返回給瀏覽器,瀏覽器將sessionId串 拿到后,存儲到瀏覽器中的cookie 中。如下圖:
3、再去請求項目2
當(dāng)然,當(dāng)前的這個sessionId串 僅僅對項目1 來說是認(rèn)識的。如果這時候瀏覽器接著訪問項目2,(在http請求中,發(fā)起請求的一方總會把自身所帶的所有cookie 打包到請求頭中傳給服務(wù))。如下邊兩張圖所示:
第一張為在去請求項目2前,可以看到瀏覽器中的cookie ,此時共有三個,其中sessionId 對應(yīng)的字符串是來自于項目1 登錄成功后返回的 :
當(dāng)我對項目2 發(fā)起請求,瀏覽器將現(xiàn)有的所有cookie 串統(tǒng)統(tǒng)放到了request headers 里,傳了過去。
4、請求必然失敗
這時候項目2 中已有的session 集合中無法根據(jù)當(dāng)前傳入進(jìn)來的sessionId串 匹配成功的。因此登錄不成功。
問題就看出來,是因為項目2 里的session 集合無法認(rèn)識當(dāng)前傳入進(jìn)來的sessionId ,匹配不到session 導(dǎo)致的訪問失敗。
二、共享session 后的邏輯
上邊已大致說明為什么需要共享session 。那共享session 后,是什么邏輯,也備了一張圖,下邊的共享項目我已經(jīng)共享到GitHub 中了。
先來說一下我的理解 ,如下:
上圖中master 項目為主項目,登錄頁即在這個項目中,suiteone 、suitetwo 為兩個從項目,當(dāng)兩個從項目有請求時,如果沒有登錄的時候,都會打到master 項目的登錄頁上。共享session 采用的是redis 存儲。
上圖的步驟如下:
以上描述的并不難,大家也都會想到,那么如何將扯了這么多的淡 真正更簡單的,落地實現(xiàn)才是大家關(guān)注的。
如果想了解具體shiro中如何實現(xiàn)的共享session ,可以參考下邊的鏈接
[shiro框架—多項目登錄訪問共享session的實現(xiàn)]
總結(jié)
以上是生活随笔為你收集整理的shiro框架---关于多项目之间验证为什么需要共享session的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java接口修饰符详解
- 下一篇: 第四范式入选Gartner 2020十大