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

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

相關代碼github鏈接

本章主要講解的是同域下單點登錄分析。



同域下SSO分析與設計

在這裏插入圖片描述

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



詳細流程分析

項目結構

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

在這裏插入圖片描述


SSO流程分析

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

1)未登錄訪問業務系統

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

由於沒有token,客戶端Filter控制其進行登錄操作,並將原始的URL作爲請求的參數。

在這裏插入圖片描述


2)用戶執行登錄操作

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

用戶提交表單,服務端獲取表單中信息後,到數據庫中進行查詢。若登錄失敗,則返回原來的登錄頁面,並攜帶原來的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設置爲無效的。

在這裏插入圖片描述

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章