登錄認證(復習Javaweb的登錄校驗)
登錄功能
思路就是loginController->service層->mapper層,從數據庫中查找username和password是否和前端用戶提交的表單內容一致,一致就登錄成功,否則就返回登錄失敗的信息。
登錄校驗
以下是基礎部分:
為什么?
這一步是因為上一步登錄功能中有bug,如果輸入系統內部的某個網址,可以直接訪問,而不是跳轉到登錄頁面。
問題:
http每次請求都是獨立的,所以當前端是depts或者emps請求時,后端服務器不知道用戶是否登錄了,所以需要一個登陸標記和統一攔截,圖下圖,登錄后存一下登錄標記,然后請求其他頁面時,統一攔截模塊就取出登錄標記,看是否有,沒有的話就跳轉到登錄頁面。
解決方案:
- 統一攔截技術:過濾器Filter和 攔截器Interceptor
- 登錄標記:會話技術
一、會話技術
同一個瀏覽器是一次會話,一次會話里可以有多個請求,比如登錄進去后訪問別的頁面。
1.使用cookie會話跟蹤:
第一次瀏覽器向服務器發出請求的時候設置一個cookie,然后服務器將用戶數據存到里面,響應的時候返回cookie給瀏覽器,瀏覽器將cookie值存儲到本地,之后每次請求都將本地的cookie值發給服務器,然后服務器就檢查cookie的值是否存在,存在就說明登錄過了,不存在就沒登陸過。
cookie無法跨域(端口號,IP/域名,協議一個不一樣就是跨域)
2. session會話跟蹤:
session是基于cookie進行的,瀏覽器請求時,服務器生成一個session(有唯一的JsessionId),然后將JsessionId放到cookie中返回給瀏覽器,下一次請求,服務器查詢JsessionID來看是否登錄過。
cookie的例子:
session的例子
3.令牌技術(企業使用)
用戶登陸后生成JWT令牌,下發給客戶端,客戶端進行存儲(存LocalStorge中),每次請求時將令牌攜帶到客戶端,服務器收到請求后進行統一攔截,并獲取令牌對其進行校驗,有效則訪問對應的業務
JWT
就是對Json進行安全的封裝
生成JWT令牌(Java)
校驗JWT令牌(Java)
三種技術對比
在登錄中增加校驗功能:
將令牌會存儲到LocalStorge中了(前端做)
二、統一攔截技術
例子:
Filter鏈
調用chain.doFilter
優先級按照類名的字母排序執行
登錄校驗加過濾器
comcat不能識別spring的controller但是可以識別servlet的程序,spring提供了DispatcherServlet
在這里插入圖片描述
Interceptor是spring提供的,攔截范圍更小,Filter攔截范圍更大