問題:在退出登錄後(廣義場景)在未重新登錄的情況下仍能進入界面,用戶數據保密問題沒有解決。 分析問題:需要進行登錄校驗(即當服務端接收到請求後,首先要將請求進行校驗,如果已經登錄,則正常訪問,沒有則返回錯誤結果) ![](https://img2023.cnblogs.com/blog/323633 ...
問題:在退出登錄後(廣義場景)在未重新登錄的情況下仍能進入界面,用戶數據保密問題沒有解決。
分析問題:需要進行登錄校驗(即當服務端接收到請求後,首先要將請求進行校驗,如果已經登錄,則正常訪問,沒有則返回錯誤結果)
如何實現(會話技術,統一攔截技術):1.在登錄成功後將登錄成功的信息在一個地方儲存起來。
2.在伺服器發起請求後,攔截所有發起的請求,並和之前的的登錄成功的信息進行比對。如果成功則繼續訪問,失敗則不允許訪問。
會話技術詳解:會話指的就是瀏覽器與伺服器之間的一次連接,我們就稱為一次會話。在瀏覽器和伺服器都沒有關閉的情況下,無論其中有多少請求和相應,都算是一次會話。
會話跟蹤技術:
https://www.cnblogs.com/zwscode/p/14284071.html。
兩種技術的優缺點:
- 優點:HTTP協議中支持的技術(像Set-Cookie 響應頭的解析以及 Cookie 請求頭數據的攜帶,都是瀏覽器自動進行的,是無需我們手動操作的)
- 缺點:
- 移動端APP(Android、IOS)中無法使用Cookie
- 不安全,用戶可以自己禁用Cookie
- Cookie不能跨域(?)
跨域
- 協議
- IP/協議
- 埠
只要上述的三個維度有任何一個維度不同,那就是跨域操作
session基於cookie,所以優缺點基本一致,不同為Session是存儲在服務端的,安全,而且無法部署於負載均衡伺服器(Nginx),因為伺服器不同,session無法識別。
現在使用的技術 令牌技術:
每次訪問時都會攜帶一個令牌,如果一致則允許訪問,反之則不允許。
缺點:不是HTTP協議支持的技術,校驗,傳遞,生產需要自己實現
優點:
-
支持PC端、移動端
-
解決集群環境下的認證問題
-
減輕伺服器的存儲壓力(無需在伺服器端存儲)
JWT令牌技術詳解
JWT全稱:JSON Web Token,jwt就是將原始的json數據格式進行了安全的封裝,這樣就可以直接基於jwt在通信雙方安全的進行信息傳輸了。
JWT的組成: (JWT令牌由三個部分組成,三個部分之間使用英文的點來分割) -
第一部分:Header(頭), 記錄令牌類型、簽名演算法等。 例如:
-
第二部分:Payload(有效載荷),攜帶一些自定義信息、預設信息等。 例如:
-
第三部分:Signature(簽名),防止Token被篡改、確保全全性。將header、payload,並加入指定秘鑰,通過指定簽名演算法計算而來。
簽名的目的就是為了防jwt令牌被篡改,而正是因為jwt令牌最後一個部分數字簽名的存在,所以整個jwt 令牌是非常安全可靠的。一旦jwt令牌當中任何一個部分、任何一個字元被篡改了,整個令牌在校驗的時候都會失敗,所以它是非常安全可靠的。
JWT根據base64進行再編碼(非加密),所以返回一個長字元串。
原理:登錄介面被訪問後生成一個JWT令牌,在每一次訪問是都會攜帶這個令牌,進入統一攔截後進行校驗令牌,通過則繼續使用。
使用方法:
1.依賴註入
2.調用工具類生成(工具類:Jwts.build)
3.解析Jwts.parser()
詳細方法可以使用已經調用的工具類
統一攔截技術
過濾器技術和攔截器技術()