摘要:本章主要講解的是同域下單點(diǎn)登錄分析。若登錄失敗,則返回原來(lái)的登錄頁(yè)面,并攜帶原來(lái)的,將原始的作為表單的隱藏屬性。若沒(méi)有,則證明該可能已經(jīng)失效或是偽造的,則向客戶端返回空字符串,否則返回查詢到的信息。
本項(xiàng)目主要講解的是單點(diǎn)登錄系統(tǒng)的原理及其實(shí)現(xiàn)。
相關(guān)代碼github鏈接。
本章主要講解的是同域下單點(diǎn)登錄分析。
流程圖雖然看著復(fù)雜,但大家不要被嚇到啦^ _ ^,請(qǐng)大家參照著流程路,聽(tīng)我下面細(xì)細(xì)道來(lái)~~
在github的代碼中,我建立了三個(gè)項(xiàng)目,分別是服務(wù)端SSOServer、客戶端SSOClient、以及兩個(gè)集成了客戶端的業(yè)務(wù)系統(tǒng)app1與aPP2。
將SSOServer,app1,app2啟動(dòng)后,開始SSO流程分析。
未登錄訪問(wèn)業(yè)務(wù)系統(tǒng)app1的index頁(yè)面:請(qǐng)求被客戶端的Filter攔截。
由于沒(méi)有token,客戶端Filter控制其進(jìn)行登錄操作,并將原始的URL作為請(qǐng)求的參數(shù)。
進(jìn)入服務(wù)端的UserLoginServlet進(jìn)行登錄操作。進(jìn)入登錄頁(yè)時(shí),獲取URL中的參數(shù)——原始的origRUL,將其作為request對(duì)象的屬性,方便后人獲取,并且跳轉(zhuǎn)到服務(wù)端的登錄頁(yè)面。
用戶提交表單,服務(wù)端獲取表單中信息后,到數(shù)據(jù)庫(kù)中進(jìn)行查詢。若登錄失敗,則返回原來(lái)的登錄頁(yè)面,并攜帶原來(lái)的URL,將原始的URL作為表單的隱藏屬性。
若登錄成功則:
1.生成token。
2.將token與其對(duì)應(yīng)的user放到全局唯一數(shù)據(jù)結(jié)構(gòu)中,方便所有人進(jìn)行獲取。
3.給該用戶設(shè)置一個(gè)cookie,值為token,用戶在下次訪問(wèn)的時(shí)候就會(huì)攜帶此cookie,服務(wù)端也就可以通過(guò)該cookie對(duì)其身份進(jìn)行驗(yàn)證。
4.判斷原始URL是否為空,若不為空則跳轉(zhuǎn)到原始URL頁(yè)面,否則跳轉(zhuǎn)到成功登錄頁(yè)面。
在用戶要跳轉(zhuǎn)到原始URL頁(yè)面的時(shí)候,被客戶端的Filter攔截,進(jìn)行有無(wú)token的驗(yàn)證,由于經(jīng)過(guò)登錄操作在cookie中已經(jīng)生成了token,故Filter發(fā)送Http通信請(qǐng)求服務(wù)端進(jìn)行token有效性的驗(yàn)證,并將token作為請(qǐng)求參數(shù)。
服務(wù)端的TokenValidateServlet獲取參數(shù)中的token后,到全局唯一數(shù)據(jù)結(jié)構(gòu)中查找有無(wú)該token對(duì)應(yīng)的user。若沒(méi)有,則證明該token可能已經(jīng)失效或是偽造的,則向客戶端返回空字符串,否則返回查詢到的user信息。
攔截器接收到服務(wù)端的返回信息,若為空字符串則返回原始登錄頁(yè)面,并攜帶原始URL,否則通過(guò)傳來(lái)的用戶信息,對(duì)user對(duì)象進(jìn)行還原,方便下個(gè)人獲取,攔截操作結(jié)束,成功進(jìn)入了業(yè)務(wù)系統(tǒng)的index頁(yè)面,并將request對(duì)象攜帶的user信息顯示出來(lái)。
在通過(guò)了客戶端的攔截器之后,業(yè)務(wù)系統(tǒng)還可以自定義攔截器,從而根據(jù)用戶信息獲取與本系統(tǒng)相關(guān)的用戶業(yè)務(wù)信息,或者是對(duì)用戶的權(quán)限進(jìn)行進(jìn)一步的驗(yàn)證,如:"豬豬"不可訪問(wèn)index頁(yè)面等QAQ。
服務(wù)端從request對(duì)象的cookie中獲取token的值,將這個(gè)token從全局?jǐn)?shù)據(jù)結(jié)構(gòu)中移除,并且將用戶保存有該token的cookie設(shè)置為無(wú)效的。
關(guān)于代碼部分,我將會(huì)在下一章節(jié)中進(jìn)行詳細(xì)解釋~~~
大家多多關(guān)照!^ _ ^
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73605.html
摘要:不同域名不同端口不同協(xié)議,只要符合其中之一都算跨域請(qǐng)求同域當(dāng)請(qǐng)求的符合域名端口協(xié)議都相同的時(shí)候,就是同域請(qǐng)求同域策略是瀏覽器內(nèi)部實(shí)現(xiàn)的一種安全機(jī)制。 cookie如何設(shè)置?如何獲??? php中向?yàn)g覽器設(shè)置 cookie setcookie($key ,$val [,$expire ,$path ,$domain ,$secure]);注意:cookie只可以存字符串類型數(shù)據(jù),而且在...
摘要:時(shí)間年月日星期三說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。慕課網(wǎng)教學(xué)示例源碼無(wú)個(gè)人學(xué)習(xí)源碼第一章概述課程介紹及介紹課程目標(biāo)認(rèn)識(shí)并理解及其應(yīng)用,并能根據(jù)其實(shí)現(xiàn)原理自行實(shí)現(xiàn)。 時(shí)間:2017年3月22日星期三說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:無(wú)個(gè)人學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:概述 1-...
摘要:前言山竹影響了我一整夜的睡眠,剛好住在廣東這邊,于是頭腦發(fā)昏的我,出了今天的推文,還需指正,請(qǐng)一針見(jiàn)血。兩個(gè)應(yīng)用系統(tǒng),同域跨域單點(diǎn)登錄實(shí)現(xiàn)。 前言 山竹影響了我一整夜的睡眠,剛好住在廣東這邊,于是頭腦發(fā)昏的我,出了今天的推文,還需指正,請(qǐng)一針見(jiàn)血。 剛好在了解公司開發(fā)平臺(tái)的權(quán)限,于是畫了張SSO單點(diǎn)登錄的流程圖,起床后寫了篇MYSQL的手記后就開始敲代碼了,終于在3小時(shí)后完成了。 兩個(gè)...
摘要:動(dòng)態(tài)生成隨機(jī)下單頁(yè)面的為了避免用戶直接訪問(wèn)下單需要將動(dòng)態(tài)化,用隨機(jī)數(shù)作為參數(shù),只能秒殺開始的時(shí)候才生成。該文件不被緩存的做法隨機(jī)數(shù)。淺談秒殺系統(tǒng)架構(gòu)設(shè)計(jì)如何只允許,第一個(gè)提交的單進(jìn)入訂單系統(tǒng)。未超過(guò)秒殺商品總數(shù),提交到子訂單系統(tǒng)。 秒殺是電子商務(wù)網(wǎng)站常見(jiàn)的一種營(yíng)銷手段。 原則 不要整個(gè)系統(tǒng)宕機(jī)。 即使系統(tǒng)故障,也不要將錯(cuò)誤數(shù)據(jù)展示出來(lái)。 盡量保持公平公正。 實(shí)現(xiàn)效果 秒殺開始前,...
摘要:經(jīng)紀(jì)人給被用于進(jìn)一步請(qǐng)求的電子身份存取?;诰W(wǎng)關(guān)基于,安全斷言標(biāo)記語(yǔ)言的出現(xiàn)大大簡(jiǎn)化了,并被批準(zhǔn)為的執(zhí)行標(biāo)準(zhǔn)。 什么是SSO? 單點(diǎn)登錄( Single Sign-On , 簡(jiǎn)稱 SSO )是目前比較流行的服務(wù)于企業(yè)業(yè)務(wù)整合的解決方案之一 SSO 使得在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要 登錄一次 就可以訪問(wèn)所有相互信任的應(yīng)用系統(tǒng) SSO 主要實(shí)現(xiàn)方式 共享 cookies 基于共享同域的...
閱讀 3250·2021-11-23 09:51
閱讀 3590·2021-11-09 09:46
閱讀 3720·2021-11-09 09:45
閱讀 2978·2019-08-29 17:31
閱讀 1886·2019-08-26 13:39
閱讀 2745·2019-08-26 12:12
閱讀 3646·2019-08-26 12:08
閱讀 2262·2019-08-26 11:31