今天群里又在讨论同一个帐户只能在一台电脑上登陆
我把之前我做过的思路说一下 供大家参考
单点登陆本意是用户只需要登录一次就可以访问所有相互信任的应用系统。简单的说就是比如这个域名登陆后,其他的域名可以不用再重复登陆,比如我登陆了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就失效了。
然后你就可以做相应的业务处理了...