面向網(wǎng)上商城的單點(diǎn)登錄系統(tǒng)的研究與實(shí)現(xiàn)_第1頁(yè)
面向網(wǎng)上商城的單點(diǎn)登錄系統(tǒng)的研究與實(shí)現(xiàn)_第2頁(yè)
面向網(wǎng)上商城的單點(diǎn)登錄系統(tǒng)的研究與實(shí)現(xiàn)_第3頁(yè)
面向網(wǎng)上商城的單點(diǎn)登錄系統(tǒng)的研究與實(shí)現(xiàn)_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

面向網(wǎng)上商城的單點(diǎn)登錄系統(tǒng)的研究與實(shí)現(xiàn)摘要:文章對(duì)現(xiàn)有單點(diǎn)登錄模型作出了優(yōu)缺點(diǎn)分析,設(shè)計(jì)了一種基于SOA架構(gòu)的單點(diǎn)登錄系統(tǒng)。系統(tǒng)基于SOA架構(gòu)使用Dubbo作為分布式服務(wù)框架,Zookeeper作為注冊(cè)中心。系統(tǒng)將自定義生成的用戶登錄憑證(Ticket)保存到Redis緩存數(shù)據(jù)庫(kù)和瀏覽器的Cookie中。登錄校驗(yàn)時(shí),攔截器會(huì)將瀏覽器中Cookie的值與Redis中的數(shù)據(jù)進(jìn)行比對(duì),以達(dá)到校驗(yàn)效果。本系統(tǒng)充分吸收了現(xiàn)有模型的優(yōu)點(diǎn),不僅具有很好的靈活性和易于管理用戶數(shù)據(jù)的優(yōu)勢(shì),而且維護(hù)簡(jiǎn)單,更重要的是它非常適用于高并發(fā)高可用需求的應(yīng)用場(chǎng)景。關(guān)鍵詞:?jiǎn)吸c(diǎn)登錄;SOA;Redis;Cookie

隨著信息化的不斷發(fā)展,普通的一體化架構(gòu)已經(jīng)無(wú)法滿足大型互聯(lián)網(wǎng)應(yīng)用龐大規(guī)模的需求,分布式垂直架構(gòu)逐漸成為大中型網(wǎng)站的主流選擇。然而,在垂直架構(gòu)中一個(gè)系統(tǒng)會(huì)被拆分成多個(gè)子系統(tǒng),分別提供不同的服務(wù)。例如淘寶,京東這種大型網(wǎng)上商城,會(huì)被拆分成相當(dāng)多的子系統(tǒng),用戶的一次購(gòu)物操作就會(huì)涉及很多個(gè)子系統(tǒng),若是所有子系統(tǒng)都需要用戶來一次登錄操作,這樣不僅繁瑣而且會(huì)增加系統(tǒng)的負(fù)擔(dān)。在這樣的背景需求下單點(diǎn)登錄系統(tǒng)的出現(xiàn)顯得尤為重要。單點(diǎn)登錄(SingleSign-on,SSO),是指在一個(gè)應(yīng)用系統(tǒng)群中,客戶端只要登錄一個(gè)系統(tǒng)就能夠在其他應(yīng)用系統(tǒng)也得到認(rèn)汪授權(quán),無(wú)需再次登錄[1-2]。

而且在現(xiàn)今環(huán)境下,日益增多的需求比如爆發(fā)式增長(zhǎng)的數(shù)據(jù)、持續(xù)提高的負(fù)載等等,對(duì)應(yīng)用系統(tǒng)提出了更嚴(yán)苛的挑戰(zhàn)。系統(tǒng)的設(shè)計(jì)不僅要考慮到高并發(fā)高可用性的需求,還要從提高可維護(hù)性,資源利用最大化(也就是對(duì)服務(wù)進(jìn)行差異化支撐)等方面去思考。本文提出的單點(diǎn)登錄系統(tǒng),采用面向服務(wù)架構(gòu)(Service-OrientedArchitecture,SOA),具有優(yōu)秀的可維護(hù)性以及可擴(kuò)展性,而且易于針對(duì)服務(wù)差異化分別搭建服務(wù)器集群,可以有效地提高網(wǎng)站性能,提升用戶體驗(yàn)。

1相關(guān)技術(shù)

目前主要的單點(diǎn)登錄實(shí)現(xiàn)方案以及它們的優(yōu)缺點(diǎn)分別如下:

基于經(jīng)紀(jì)人的單點(diǎn)登錄方案的主要特點(diǎn)是引進(jìn)了第三方的服務(wù)器作為經(jīng)紀(jì)人[3](Broker)用來實(shí)現(xiàn)認(rèn)證功能以及管理用戶信息。該方案的主要優(yōu)點(diǎn)是對(duì)用戶數(shù)據(jù)進(jìn)行集中管理和維護(hù)比較容易;主要缺點(diǎn)是需要修改原有應(yīng)用服務(wù)器的認(rèn)證模塊。

基于代理的單點(diǎn)登錄方案(Agent-BasedSSO)的主要特點(diǎn)是引入了代理程序(Agent)來為不同的應(yīng)用系統(tǒng)自動(dòng)完成認(rèn)證操作[4]。該方案的優(yōu)點(diǎn)是不用對(duì)原有系統(tǒng)進(jìn)行改動(dòng),具有很好的靈活性;缺點(diǎn)是每一個(gè)應(yīng)用系統(tǒng)都要配置相應(yīng)的代理插件,增加了維護(hù)時(shí)的難度。

基于代理&經(jīng)紀(jì)人的單點(diǎn)登錄方案的主要特點(diǎn)是綜合吸收了基于代理方案和基于經(jīng)紀(jì)人方案的優(yōu)點(diǎn),不僅具有前者的靈活性而且兼?zhèn)浜笳呒泄芾淼膬?yōu)勢(shì)[5]?;诰W(wǎng)關(guān)的單點(diǎn)登錄方案的主要特點(diǎn)是在網(wǎng)絡(luò)的入口處設(shè)置一個(gè)網(wǎng)關(guān),并且將資源保護(hù)在受信網(wǎng)段之內(nèi)[6]。用戶通過網(wǎng)關(guān)的認(rèn)證授權(quán)后,才能進(jìn)行后續(xù)的訪問。該方案的優(yōu)點(diǎn)是,網(wǎng)關(guān)的安裝和設(shè)置相對(duì)方便;缺點(diǎn)是在多個(gè)安全網(wǎng)關(guān)的情況下,用戶信息很難進(jìn)行同步保存。

2基于SOA的單點(diǎn)登錄方案

SOA具有松耦合、位置透明以及可以在異構(gòu)平臺(tái)間復(fù)用等好處[7]。它的最主要特點(diǎn)是表現(xiàn)層和服務(wù)層的解耦合,相當(dāng)于將原來的系統(tǒng)從服務(wù)層—刀切開分成兩個(gè)子系統(tǒng),再通過接口聯(lián)系起來。系統(tǒng)可拆分為Web和Service兩個(gè)子系統(tǒng)。Web系統(tǒng)分為表現(xiàn)層和控制層,表現(xiàn)層提供統(tǒng)一的登錄/注冊(cè)界面.控制層處理接收到的用戶請(qǐng)求。Service系統(tǒng)負(fù)責(zé)具體業(yè)務(wù)的實(shí)現(xiàn),并對(duì)外提供業(yè)務(wù)接口。

2.1注冊(cè)流程

用戶填寫完注冊(cè)信息后,系統(tǒng)會(huì)生成隨機(jī)驗(yàn)證碼并將其保存在Redis緩存中,與此同時(shí)還經(jīng)消息隊(duì)列調(diào)用阿里大于短信接口[8],將驗(yàn)證碼發(fā)送給用戶。用戶提交接收到的驗(yàn)證碼,系統(tǒng)將其與保存在Redis中的信息進(jìn)行對(duì)比,若相同則注冊(cè)成功。成功后系統(tǒng)將用戶信息保存在數(shù)據(jù)庫(kù)中。具體流程如圖l所示。

2.2登錄流程

用戶登錄校驗(yàn)時(shí),系統(tǒng)會(huì)將接收到的登錄信息與存放在數(shù)據(jù)庫(kù)中的信息進(jìn)行對(duì)比,判斷用戶是否合法。若合法,則生成一個(gè)Ticket票據(jù),然后將此票據(jù)存入用戶瀏覽器Cookie中,同時(shí)還將Ticket和用戶信息以鍵值對(duì)的形式存入Redis緩存數(shù)據(jù)庫(kù)。

Ticket是由系統(tǒng)生成的一個(gè)字符串,具有唯一性,用作登錄憑證。我們使用MD5加密后的用戶ID作為Ticket。由于Cookie不能被跨域訪問,然而上級(jí)域名下的Cookie能夠被下級(jí)域名下的網(wǎng)頁(yè)獲得。所以我們要將各個(gè)子系統(tǒng)的域名統(tǒng)一為二級(jí)域名,而且將Ticket存放在頂級(jí)域名下的Cookie中??紤]到數(shù)據(jù)庫(kù)的存取操作耗時(shí)較大,而且Ticket不需要持久化存儲(chǔ),所以我們?cè)诜?wù)器端將Ticket存放在Redis緩存中,以提高系統(tǒng)性能。具體流程如圖2所示。

2.3認(rèn)證流程

我們對(duì)必須登錄以后才能進(jìn)行的請(qǐng)求編寫攔截器。攔截器在請(qǐng)求訪問具體的控制器之前進(jìn)行登錄判斷:

(l)判斷請(qǐng)求頭部的Cookie中是否存在Ticket。如果不存在Ticket則說明沒有登錄,則重新定向跳轉(zhuǎn)到登錄頁(yè)面。

(2)如果存在Ticket,然后判斷Ticket對(duì)應(yīng)的用戶信息數(shù)據(jù)是否也存在于Redis緩存中。如果存在用戶信息則說明已經(jīng)登錄并且沒有過期,那么放行;如果不存在用戶信息那么說明用戶的登錄已經(jīng)過期,重新定向跳轉(zhuǎn)到登錄頁(yè)面。

由于其他子系統(tǒng)和單點(diǎn)登錄系統(tǒng)在不同的二級(jí)域名下,所以當(dāng)其他子系統(tǒng)向單點(diǎn)登錄系統(tǒng)請(qǐng)求獲取用戶信息時(shí),屬于跨域請(qǐng)求。而在同源策略[9]下,跨域請(qǐng)求可以正常發(fā)送,但是得不到返回值。資料格式的使用模式(JSONwithPadding,JSONP)[lo]構(gòu)建于JSON之上,通過動(dòng)態(tài)生成script標(biāo)簽加載另一個(gè)源上的JS文件來得到返回的JSON數(shù)據(jù),我們使用JSONP實(shí)現(xiàn)跨域請(qǐng)求。

2.4退出流程

退出時(shí),我們只需將Redis里的Ticket有效時(shí)間設(shè)置為立即失效即可。

3實(shí)驗(yàn)結(jié)果分析

登錄前頁(yè)iURL地址為“www.taotao”,導(dǎo)航欄顯示“您好,歡迎來到淘淘![登錄][免費(fèi)注冊(cè)]”,如圖3所示。

注冊(cè)頁(yè)面URL地址為“sso.taotao/register”,我們注冊(cè)一個(gè)用戶名為“小小陽(yáng)光”的用戶,如圖4所示。

登錄后頁(yè)面URL地址為“www.taotao”,導(dǎo)航欄顯示為“小小陽(yáng)光,歡迎來到淘淘![退出]”。說明登錄成功,而且跨域從登錄系統(tǒng)拿到了用戶信息,如圖5所示。

4結(jié)語(yǔ)

本文設(shè)計(jì)實(shí)現(xiàn)了一個(gè)面向網(wǎng)上商城的單點(diǎn)登錄系統(tǒng),適用于大中型網(wǎng)站建設(shè)。本系統(tǒng)將Ticket票據(jù)和用戶

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論