需要在分布式微服务系统中实现 单点登录,即在其它电脑登录同一账号时,会立刻下线当前登录的用户。 当下我们用的定时器 每隔一分钟调用一次接口,从而验证token的失效情况。
请问大佬们有什么好的解决方案嘛!!!!麻烦大佬给点思路....
定时器这个也太不好了,你可以把登陆状态记在一个地方,如果有其他端登陆了,你可以根据记的登陆状态下线当前登录用户
定时器是公司里之前开发人员做的方案,登陆我们是把token和登陆状态存到了Redis. 问题是他端登陆后,这边如何立即感知到呢
登陆状态表不行吗?定时器当前不行啊
我之前做过单端单登陆的,是用的websocket,每一次建立连接都查一下表有没有处于登陆状态,处于登陆状态就通过websocket通知旧的,进行下线。
定时器是会隔段时间调用接口,查看token失效情况,失效就给出提示退到登录页面了
websocket?
token自身有一个过期时间如1d,在进行token验证的地方,加一个禁用token list ,每次登陆的时候,将当前非所有的uid的token记录到这个禁用list里面.通知方式通过redis pub sub
这里肯定有一个事件推送的,用mq也可以。方案是在你重新登录的时候,还没有获得最新token的时候,发起这个用户的注销事件,然后注销后,获得token登录。这样就能解决了。
写个过滤器去查询登录状态,登录或者点击页面时,过滤器去查询一下登录状态,如果有新的人登录了就提示当前用户下线。这样很方便的,不用去考虑什么token啊,websocket啊之类的,直接调用退出接口,美滋滋
这个方法我也在用,最好添加一个redis,不用每次都去查数据库,查redis会比较友好
。。。把token失效掉就好了