同域下單點登陸分析 | 單點登陸講解(2)

本項目主要講解的是單點登陸系統的原理及其實現。git

相關代碼github連接github

本章主要講解的是同域下單點登陸分析。數據庫



同域下SSO分析與設計

在這裏插入圖片描述

流程圖雖然看着複雜,但你們不要被嚇到啦^ _ ^,請你們參照着流程路,聽我下面細細道來~~cookie



詳細流程分析

項目結構

在github的代碼中,我創建了三個項目,分別是服務端SSOServer、客戶端SSOClient、以及兩個集成了客戶端的業務系統app1與aPP2。數據結構

在這裏插入圖片描述


SSO流程分析

將SSOServer,app1,app2啓動後,開始SSO流程分析。app

1)未登陸訪問業務系統

未登陸訪問業務系統app1的index頁面:請求被客戶端的Filter攔截。spa

因爲沒有token,客戶端Filter控制其進行登陸操做,並將原始的URL做爲請求的參數。設計

在這裏插入圖片描述


2)用戶執行登陸操做

進入服務端的UserLoginServlet進行登陸操做。進入登陸頁時,獲取URL中的參數——原始的origRUL,將其做爲request對象的屬性,方便後人獲取,而且跳轉到服務端的登陸頁面。3d

用戶提交表單,服務端獲取表單中信息後,到數據庫中進行查詢。若登陸失敗,則返回原來的登陸頁面,並攜帶原來的URL,將原始的URL做爲表單的隱藏屬性對象

在這裏插入圖片描述

若登陸成功則:

1.生成token。

2.將token與其對應的user放到全局惟一數據結構中,方便全部人進行獲取。

3.給該用戶設置一個cookie,值爲token,用戶在下次訪問的時候就會攜帶此cookie,服務端也就能夠經過該cookie對其身份進行驗證。

4.判斷原始URL是否爲空,若不爲空則跳轉到原始URL頁面,不然跳轉到成功登陸頁面。

在用戶要跳轉到原始URL頁面的時候,被客戶端的Filter攔截,進行有無token的驗證,因爲通過登陸操做在cookie中已經生成了token,故Filter發送Http通訊請求服務端進行token有效性的驗證,並將token做爲請求參數。

服務端的TokenValidateServlet獲取參數中的token後,到全局惟一數據結構中查找有無該token對應的user。若沒有,則證實該token可能已經失效或是僞造的,則向客戶端返回空字符串,不然返回查詢到的user信息。

攔截器接收到服務端的返回信息,若爲空字符串則返回原始登陸頁面,並攜帶原始URL,不然經過傳來的用戶信息,對user對象進行還原,方便下我的獲取,攔截操做結束,成功進入了業務系統的index頁面,並將request對象攜帶的user信息顯示出來。

在這裏插入圖片描述


3)業務系統增長本身的攔截器

在經過了客戶端的攔截器以後,業務系統還能夠自定義攔截器,從而根據用戶信息獲取與本系統相關的用戶業務信息,或者是對用戶的權限進行進一步的驗證,如:"豬豬"不可訪問index頁面等QAQ。

在這裏插入圖片描述


4)單點退出

服務端從request對象的cookie中獲取token的值,將這個token從全局數據結構中移除,而且將用戶保存有該token的cookie設置爲無效的。

在這裏插入圖片描述

關於代碼部分,我將會在下一章節中進行詳細解釋~~~你們多多關照!^ _ ^

相關文章
相關標籤/搜索