使用Redis解决单一用户登录问题

最近项目遇到个需求:像QQ一样实现一个账号只能在一个地点登录,不是单点登录哈,这两个完全不是一件事。

一开始没什么思路,直接在登录类写了个map存储登录账号的id(key)和IP(value),登录时向里存当前登录者的账号id和IP(获取当前登录者IP这段代码直接参考https://blog.csdn.net/jinwufeiyang/article/details/52102449或自己百度)再次登录时比较IP。。。反正自己乱想的也没什么意思就不详细讲了。

这个需求不是很急所以优先干其他的活的时候网上找了一堆资料,大部分是使用session配合监听器来做的,具体自己百度10个里有8个是这种,自己尝试一下,反正没调通就放弃了没有深入研究,后来看到这种:application作用域实现用户登录挤掉之前登录用户代码,眼前一亮,复制粘贴修改,OK了实现了,不过application还是不太友好。

后来和同事讨论后,提出引入Redis解决session消亡时间同步问题,主要实现的方式很简单:登录时向Redis存入登录账号的id(key)和IP(value)并设置和session一样的消亡时间,然后添加全局拦截器,每个请求都校验IP这样避免引入DWR,具体代码如下:

1.登录:


2.拦截器:


当然本人也是半路出家的人,如果大家有什么好的意见或批评,请留言批评指正。

你可能感兴趣的:(使用Redis解决单一用户登录问题)