Web应用安全————多点登录互斥
引言
在實際生活中,很多網(wǎng)站都做了多點登錄互斥的操作,簡單來說就是同一個賬號,只能在一臺電腦上登錄,如果有人在其他地方登錄,那么原來登錄的地方就會自動下線,再進(jìn)行操作就會彈出登錄界面。
實現(xiàn)思路
在《Web應(yīng)用安全————賬號凍結(jié)與 Session 實時失效》中,我們通過map 來維護(hù)一個全局的“用戶名 - Session Id” 關(guān)系,這樣,就可以方便的根據(jù)用戶名來找到此用戶的Session id。
根據(jù)Map 的特性,在調(diào)用 put 方法的時候,會覆蓋相同 key 下的 value 值,因此,我們在存儲 session id 前,先取出對應(yīng) 用戶名的 session id ,將其注銷(調(diào)用stop()方法)就可以完成這一操作。
其實功能實現(xiàn)的整體思路和 凍結(jié)賬號使 session 失效的思路基本相同,只不過凍結(jié)賬號是管理員手動操作,而多點登錄是通過登錄操作自動觸發(fā),使原來的 session 失效。
關(guān)鍵代碼
紅框內(nèi)的語句就是處理多點登錄互斥的關(guān)鍵代碼,其實就是在用戶登錄時去map 中查找該用戶上一次使用的 session id ,再通過 Shiro 的SessionManager 的 getSession(sessionId) 查找 對應(yīng)的 session 對象,判空后執(zhí)行 注銷操作 stop() 。
如果不清楚 CcShiroSessionIdPoolVo 的結(jié)構(gòu),可以參考《Web應(yīng)用安全————賬號凍結(jié)與 Session 實時失效》?,這里就不重復(fù)解釋了。
總結(jié)
其實不論賬號凍結(jié)還是多點登錄的互斥,都是對 用戶賬號的一種保護(hù)機(jī)制,避免用戶的賬號被不法利用。
兩者實現(xiàn)的思路本質(zhì)上是基本相同的,都是在 登錄的 處理中,加入對 session 的操作,主要就是能夠拿到指定用戶的 session id ,然后就是找到 session ,并注銷。
我個人認(rèn)為難點就是如何通過指定用戶找到對應(yīng)的 session id,網(wǎng)上好像也沒有類似的教程和案例,于是只能自己手動封裝一個 map 來維護(hù)用戶名和 session id 的關(guān)系,如果有朋友知道使用框架 api 獲取指定用戶 session id 的方法,歡迎文末留言探討交流,非常感謝!
?
總結(jié)
以上是生活随笔為你收集整理的Web应用安全————多点登录互斥的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle中start with xx
- 下一篇: 抽象工厂模式升级版————泛型化实现