新聞中心
創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
一、問(wèn)題引導(dǎo)
在Web開(kāi)發(fā)中,實(shí)現(xiàn)一個(gè)賬號(hào)只能在一處登陸有兩種形式:1.當(dāng)某個(gè)賬號(hào)在某處登陸后,如果再在其他處登陸,將前一個(gè)賬號(hào)擠掉;2.當(dāng)某個(gè)賬號(hào)登陸后,此賬號(hào)在其他設(shè)備登陸提示已經(jīng)登陸,無(wú)法登陸。 正常的應(yīng)用邏輯第一種應(yīng)用較為廣泛,因此此篇文章討論一下第一種邏輯在spring mvc開(kāi)發(fā)中一種較為簡(jiǎn)單的實(shí)現(xiàn)方式。
然而在沒(méi)有長(zhǎng)連接如WebSocket或者異步請(qǐng)求輪詢的情況下,我們之前登陸的賬號(hào)只能在下一次請(qǐng)求(同步或異步)才能獲取被擠掉的狀態(tài)(如頁(yè)面跳轉(zhuǎn))。
二、實(shí)現(xiàn)步驟
1.建立一個(gè)靜態(tài)Map,用來(lái)存放賬號(hào)和sessionID的對(duì)應(yīng)關(guān)系
2.在登陸時(shí),校驗(yàn)Map中是否已存在此賬號(hào),如果不存在說(shuō)明是第一次登陸,將賬號(hào)和sessionID的對(duì)應(yīng)關(guān)系存放到靜態(tài)Map中;如果Map中存在此賬號(hào),并且sessionID和本次請(qǐng)求的sessionID不一致,將Map中的sessionID替換掉,因此之前登陸的賬戶在發(fā)送下一次非登錄和校驗(yàn)的請(qǐng)求會(huì)被攔截。
3.創(chuàng)建攔截器,攔截除登陸和校驗(yàn)url以外的所有請(qǐng)求。判斷請(qǐng)求的sessionID和靜態(tài)Map中此賬戶對(duì)應(yīng)的sessionID是否一致。如果不一致,跳轉(zhuǎn)到登陸頁(yè)面。
三、實(shí)現(xiàn)代碼
1.創(chuàng)建一個(gè)內(nèi)存數(shù)據(jù)類,用于存放靜態(tài)的數(shù)據(jù),并初始化:
public class MemoryData { private static MapsessionIDMap = new HashMap (); public static Map getSessionIDMap() { return sessionIDMap; } public static void setSessionIDMap(Map sessionIDMap) { MemoryData.sessionIDMap = sessionIDMap; } }
文章題目:SpringMVC實(shí)現(xiàn)賬號(hào)只能在一處登陸-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://www.dlmjj.cn/article/iseeo.html