用java實現一個簡單的單用戶登陸功能的思路
引用
所謂“單用戶單賬戶登錄”是指:在同一系統中,一個用戶名不能在兩個地方同時登錄。
我們參照 QQ 實現效果:當某賬號在 A 處登錄後,在未退出的情況下,如果再到 B 處登錄,那麽,系統會擠下 A 處登錄的賬號。
要實現這樣一個功能,如果我們項目使用了springmvc我們可以使用攔截器來替代過濾器,否則我們使用過濾器也可以實現,我們需要一個這樣的東西來進行攔截用戶的請求。我們的user表裏也需要添加一個token字段,用於存放當前登錄者的一個唯一標識。
大致的思路是這樣的:
用戶A請求123這個賬號登陸,登陸成功後生成一個唯一token存入123這個對象的token裏,並把這個user對象放入session中,最重要的是別忘記更新這個用戶的表記錄。如果這時用戶B也請求登陸123賬號,同樣的我們也在登陸成功後生成要給唯一token存入123這個對象的token裏,並把這個user對象放入session中,最重要的是別忘記更新這個用戶的表記錄。現在的情況是有兩個用戶在兩個地點登陸了同一個賬號123,那麽此時如果用戶A向服務器發送了一個請求他想要去查看個人資料,我們的攔截器就要開始工作了,可以說整個單用戶登陸的重點都在這個攔截器裏面,在攔截器裏面我們去獲取session中保存的user對象,此時我們要明白當前這個user對象裏的token標記著的是用戶A,而數據庫裏真實token的數據已經在用戶B登陸後被修改了,標記著的是用戶B,我們根據這個條件用session中的user對象和數據庫中的user去進行比較判斷token是否相同就可以實現單用戶登陸這個功能了,如果相同說明是同一個用戶,否則就說明有其他人在其他地方登陸了,需要清除掉當前session中的user去退出當前這個賬號即可。
用java實現一個簡單的單用戶登陸功能的思路