今天群裡又在討論同一個帳戶只能在一台電腦上登陸
我把之前我做過的思路說一下 供大家參考
單點登陸本意是使用者只需要登入一次就可以訪問所有相互信任的應用系統。簡單的說就是比如這個網域名稱登陸後,其他的網域名稱可以不用再重複登陸,比如我登陸了QQ空間,可以直接輸入郵箱的地址,而不用重新登入。
當初我在網上搜的時候也挺納悶,同一個帳戶只能在一台電腦(同一IP)上登陸對於我來說就叫單點登陸,所以搜的時候沒搜到想要的。
好吧,不廢話了,說解決思路。
1.在使用者登陸的時候,把使用者的id和目前時間的long值(其他什麼值也可以)存到application的map裡面去。
2.同時把使用者的資訊存到session裡面去。
3.使用者發起請求的時候filter過濾取 session裡面的使用者的long值和根據使用者的id在application裡面取到的long值進行比較。相等,則有效。不相等,則說明已經在另外一個地方登入,當前session就失效,然後自己做自己的業務處理。
例如:
User實體有id,passwd欄位
那麼我額外給User實體再加上一個time 欄位(用於存等於登陸時候的時間的long值)
User
id為1
passwd為123456
第一次登陸成功時得到目前時間的long值1347264831311
把這個long值set到User然後把整個User儲存到session
同時把這個long值和id:1存到application的一個全域map
id為key long為value
此時application裡面的long和當前session裡的long是相等的
session有效
第二次使用者再次用 id為1密碼為123456的帳號登陸成功時,會把當前的時間long值如1347265230674存到a
pplication的map中,key為1的value就被改寫成本次登陸時候的時間long值1347265230674
那麼第一次登陸的那個使用者的session裡面取到的User的time就和application裡面的就不相等了,則此時session就失效了。
然後你就可以做相應的業務處理了...