日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shiro框架---关于多项目之间验证为什么需要共享session

發布時間:2025/3/12 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shiro框架---关于多项目之间验证为什么需要共享session 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于多項目之間登錄驗證為什么需要共享session

服務器上部署了兩個項目,登錄之后才可以訪問其中的接口。現在想要實現,當登錄項目1成功后,可以不需要再登錄項目2,直接可以訪問項目2中的接口。
大部分人都會想到,共享session ,但是為什么是共享session 呢?

一、為什么需要共享session

以shiro 框架作為登錄驗證權限框架 為例,這里還不寫這個,先說為什么需要共享session ,正常情況的時候,是如下圖:

如上圖描述,每個項目中shiro 都維護了自己的sessionid與session的關系 ,它們之間不共享。

上圖兩個項目中切換請求必然會有如下的步驟:
1、sessionId串的生成

瀏覽器首次對項目1發起請求時,項目1 會為當前請求創建一個session ,根據session 生成一個sessionId 字符串,該sessionId串 與創建的session 維護著一個關聯關系。

2、sessionId串存到cookie中

后臺將該sessionId串返回給瀏覽器,瀏覽器將sessionId串 拿到后,存儲到瀏覽器中的cookie 中。如下圖:

3、再去請求項目2

當然,當前的這個sessionId串 僅僅對項目1 來說是認識的。如果這時候瀏覽器接著訪問項目2,(在http請求中,發起請求的一方總會把自身所帶的所有cookie 打包到請求頭中傳給服務)。如下邊兩張圖所示:

第一張為在去請求項目2前,可以看到瀏覽器中的cookie ,此時共有三個,其中sessionId 對應的字符串是來自于項目1 登錄成功后返回的 :

當我對項目2 發起請求,瀏覽器將現有的所有cookie 串統統放到了request headers 里,傳了過去。

4、請求必然失敗

這時候項目2 中已有的session 集合中無法根據當前傳入進來的sessionId串 匹配成功的。因此登錄不成功。
問題就看出來,是因為項目2 里的session 集合無法認識當前傳入進來的sessionId ,匹配不到session 導致的訪問失敗。

二、共享session 后的邏輯

上邊已大致說明為什么需要共享session 。那共享session 后,是什么邏輯,也備了一張圖,下邊的共享項目我已經共享到GitHub 中了。
先來說一下我的理解 ,如下:


上圖中master 項目為主項目,登錄頁即在這個項目中,suiteone 、suitetwo 為兩個從項目,當兩個從項目有請求時,如果沒有登錄的時候,都會打到master 項目的登錄頁上。共享session 采用的是redis 存儲。

上圖的步驟如下:

  • 瀏覽器請求master 項目,第一次請求的時候,也是會帶著瀏覽器中的cookie 去請求,當然第一次去redis 里肯定找不到對應的session,會通過⑤進入到登錄頁。
  • 當在登錄頁輸入完正確的賬號密碼后,才能登錄成功,否則仍會回到⑤。
  • 在這一步的時候,會將登錄成功后的session ,根據它,將生成sessionId串 ,并傳到前端瀏覽器中,瀏覽器以cookie 存儲。
  • 同時將第③步中生成的session 存儲到redis 中。
  • 當前這里,不只是當登錄失敗的時候,會進入到登錄頁中,當瀏覽器長時間沒有訪問后臺(每次瀏覽器訪問后臺,其實都會刷新session 的過期時間expireTime),導致session 超過時,也會進入到該步中。
  • 當瀏覽器請求suiteone 、suteTwo 這兩個從項目時,肯定也是將當前瀏覽器中的所有的cookie 設置到request headers 請求頭中。
  • 根據傳入的sessionId串 到共享的redis 存儲中匹配。
  • 如果匹配不到,則會跳轉到master 項目的登錄頁,如果匹配成功,則會訪問通過。
  • 以上描述的并不難,大家也都會想到,那么如何將扯了這么多的淡 真正更簡單的,落地實現才是大家關注的。
    如果想了解具體shiro中如何實現的共享session ,可以參考下邊的鏈接
    [shiro框架—多項目登錄訪問共享session的實現]

    總結

    以上是生活随笔為你收集整理的shiro框架---关于多项目之间验证为什么需要共享session的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。