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