今天羣裏又在討論同一個帳戶只能在一臺電腦上登陸
我把之前我做過的思路說一下 供大家參考
單點登陸本意是用戶只需要登錄一次就可以訪問所有相互信任的應用系統。簡單的說就是比如這個域名登陸後,其他的域名可以不用再重複登陸,比如我登陸了QQ空間,可以直接輸入郵箱的地址,而不用重新登錄。
當初我在網上搜的時候也挺納悶,同一個帳戶只能在一臺電腦(同一IP)上登陸對於我來說就叫單點登陸,所以搜的時候沒搜到想要的。
好吧,不廢話了,說解決思路。
1.在用戶登陸的時候,把用戶的id和當前時間的long值(其他什麼值也可以)存到application的map(存到全局的靜態變量也可以,不是非要application)裏面去。
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就失效了。
然後你就可以做相應的業務處理了...