最近項目遇到個需求:像QQ一樣實現(xiàn)一個賬號只能在一個地點登錄卦睹,不是單點登錄哈,這兩個完全不是一件事方库。
一開始沒什么思路结序,直接在登錄類寫了個map存儲登錄賬號的id(key)和IP(value),登錄時向里存當(dāng)前登錄者的賬號id和IP(獲取當(dāng)前登錄者IP這段代碼直接參考https://blog.csdn.net/jinwufeiyang/article/details/52102449或自己百度)再次登錄時比較IP薪捍。笼痹。配喳。反正自己亂想的也沒什么意思就不詳細(xì)講了酪穿。
這個需求不是很急所以優(yōu)先干其他的活的時候網(wǎng)上找了一堆資料,大部分是使用session配合監(jiān)聽器來做的晴裹,具體自己百度10個里有8個是這種被济,自己嘗試一下,反正沒調(diào)通就放棄了沒有深入研究涧团,后來看到這種:application作用域?qū)崿F(xiàn)用戶登錄擠掉之前登錄用戶代碼只磷,眼前一亮,復(fù)制粘貼修改泌绣,OK了實現(xiàn)了钮追,不過application還是不太友好。
后來和同事討論后阿迈,提出引入Redis解決session消亡時間同步問題元媚,主要實現(xiàn)的方式很簡單:登錄時向Redis存入登錄賬號的id(key)和IP(value)并設(shè)置和session一樣的消亡時間,然后添加全局?jǐn)r截器,每個請求都校驗IP這樣避免引入DWR刊棕,具體代碼如下:
1.登錄:
2.攔截器:
當(dāng)然本人也是半路出家的人炭晒,如果大家有什么好的意見或批評,請留言批評指正甥角。