Jfinal实现单一用户登陆(挤掉之前用户)

现在要实现的功能是:同一个账户只允许一个地方登陆,不同电脑/IP登陆会挤掉前一个人,计划使用session加ip地址来实现,失败了(因为哪怕是同一台电脑不同浏览器登陆,session都不一样,此方法不通) 后来想用application来存取信息但是这个方法也不通,信息会一直放在application中,相当于用户永久登陆,看到别人使用HttpSessionAttributeListener来做的 具体成果后续更新

评论区

Don小浩

2018-08-08 15:49

@Jfinal 波哥 过来建议建议啊。。。

JFinal

2018-08-08 16:09

登录这个动作完成后,根据该用户的 id 判断当前登录用户是否已登录,如果已登录,踢出以前那个登录就好,其实很简单

Don小浩

2018-08-08 16:12

@JFinal 就是这里的判断信息 你从什么地方取 我之前是放在session中的 但是不同浏览器session取到的也不是同一个 而且还要比较ip信息 才能判断是否挤掉

JFinal

2018-08-08 16:21

@Don小浩 这个问题与 ip 地址无关

Don小浩

2018-08-08 16:23

@JFinal ?? 波哥 我的功能意思是 同一个账户 只能在一台电脑登录 如果别人在其他地方登录 我肯定要比较ip地址是否一致 而且我现在遇到的问题是这种东西应该存在哪里 session 和 application都不行

Don小浩

2018-08-09 09:03

@JFinal 实现完成后 才明白您说的与ip地址无关的意思,一直在想实现,脑子有点蒙,有人提到ip地址判断 就没绕出这个坑

Don小浩

2018-08-09 09:06

使用一个map来保存session信息,只要确保这个map是全局的 统一使用和维护的 key为用户名 用户登录的时候对map进行操作 在全局拦截器里对用户的session进行判断
因为是根据session判断的 哪怕同一台电脑的不同浏览器登录也会挤掉 所以无需判断ip地址问题 这样就实现了单个账号只能唯一登录

Don小浩

2018-08-09 09:35

@JFinal 在这个分享里提个问题 如果想让任意一个方法被拦截器拦截的话 你不光需要在方法上设置拦截器 还需要使用Duang.duang()、Enhancer.enhance()这两个任意一个方法 对它进行加强 才能达到拦截效果, 目前不清楚这两个增强各有什么好处 有什么不同 功能介绍上一模一样 而且要拦截的方法不支持静态方法 目前也不清楚原因
最近忙于实现 有些问题可能需要抽出休息时间研究 波哥能给点思路之类的么

或是的话

2018-08-09 09:37

@Don小浩 shiro 可以实现

或是的话

2018-08-09 09:39

@Don小浩 百度搜索 KickoutSessionControlFilter

Don小浩

2018-08-09 11:09

@或是的话 我已经自己实现简单的了 没必要用到shiro 我这个是后台一个服务 只有一个超级用户

l745230

2018-08-09 20:07

用户每次登陆生成一个token,保存到cookie中, 并把之前生成的token失效, 调用接口的时候cookie中有token,作为参数传入拦截器,校验token,这时候其他设备登陆生成的token都失效了,也就访问不了接口.

Don小浩

2018-08-10 09:21

@l745230 这个功能我都已经实现了 我用的session来处理的 用session替代了你所谓的token

nommpop

2018-08-15 11:23

@Don小浩 把源码片段贴出来也好啊

蔚蓝天空

2019-01-04 13:17

请教用的session怎么处理这个问题的????

热门分享

扫码入社