锁定老帖子 主题:限制多窗口重复登陆
精华帖 (9) :: 良好帖 (2) :: 新手帖 (11) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-25
session监听
或者使用Spring security |
|
返回顶楼 | |
发表时间:2009-12-25
Joo 写道 yonglin4605 写道 验证IP地址不行吗?或者MAC地址
这样会导致一台pc只能限制一个用户登陆使用,这显然是不能说服客户的 你对登录进行日志记录,每次登陆时验证一下就好了 |
|
返回顶楼 | |
发表时间:2009-12-25
yonglin4605 写道 Joo 写道 yonglin4605 写道 验证IP地址不行吗?或者MAC地址
这样会导致一台pc只能限制一个用户登陆使用,这显然是不能说服客户的 你对登录进行日志记录,每次登陆时验证一下就好了 你这种做法技术上可行,但是前后矛盾,命名用IP/MAC来限制了,缺又要针对用户做验证。这样的话,还不如从一开始就不要限制IP/MAC不是更好? 更何况,IP/MAC也不是绝对的标识符,在网络变更或者硬件升级的情况下难不成软件系统也要跟着做一次清理? |
|
返回顶楼 | |
发表时间:2009-12-25
增加一个filter,保存userid和sessionid,
ConcurrentSessionController是一个接口,有两个需要实现的方法:checkAuthenticationAllowed()和registerSuccessfulAuthentication(),Spring Security提供了一个实现类ConcurrentSessionControllerImpl,经过分析缺省的实现类,发现方法allowableSessionsExceeded()处理多次并发会话,在SecurityRegistry中保存每个会话的信息,主要是用户帐号对应的会话ID(sessionId)和最后发起时间,在并发发生时,从SecurityRegistry中取出关于某个用户帐号的所有会话(spring security 可以可以控制同时同一个用户登录几次),如果exceptionIfMaximumExceeded = false,找到最早一个会话,将其释放掉,腾出空间给新会话,如果exceptionIfMaximumExceeded = true,将发出一个异常。 |
|
返回顶楼 | |
发表时间:2009-12-25
if(上次登录IP与本次登录IP相同 && 上次登录时间距离现在不超过5分钟){
禁止5分钟内进行业务查询 } 这个方法挺简单的啊 我们没有办法对客户端进行全面的控制(包括session),最好的方法就是在服务器端控制 |
|
返回顶楼 | |
发表时间:2009-12-25
yonglin4605 写道
if(上次登录IP与本次登录IP相同 && 上次登录时间距离现在不超过5分钟){
禁止5分钟内进行业务查询 } 这个方法挺简单的啊 我们没有办法对客户端进行全面的控制(包括session),最好的方法就是在服务器端控制
另外,session本身就是服务器端的东东,表混淆了
|
|
返回顶楼 | |
发表时间:2009-12-25
melin 写道 增加一个filter,保存userid和sessionid,
ConcurrentSessionController是一个接口,有两个需要实现的方法:checkAuthenticationAllowed()和registerSuccessfulAuthentication(),Spring Security提供了一个实现类ConcurrentSessionControllerImpl,经过分析缺省的实现类,发现方法allowableSessionsExceeded()处理多次并发会话,在SecurityRegistry中保存每个会话的信息,主要是用户帐号对应的会话ID(sessionId)和最后发起时间,在并发发生时,从SecurityRegistry中取出关于某个用户帐号的所有会话(spring security 可以可以控制同时同一个用户登录几次),如果exceptionIfMaximumExceeded = false,找到最早一个会话,将其释放掉,腾出空间给新会话,如果exceptionIfMaximumExceeded = true,将发出一个异常。 多谢,我去看看这个能否满足要求。我们现在使用的是在Spring源码上扩展后的一个框架,不知道是否有保留Spring Security部分了呵呵 另外,如果是多台WEB集群,每台上面的SecurityRegistry会互相复制吗? |
|
返回顶楼 | |
发表时间:2009-12-25
Joo 写道
yonglin4605 写道
if(上次登录IP与本次登录IP相同 && 上次登录时间距离现在不超过5分钟){
禁止5分钟内进行业务查询 } 这个方法挺简单的啊 我们没有办法对客户端进行全面的控制(包括session),最好的方法就是在服务器端控制
另外,session本身就是服务器端的东东,表混淆了
我的意思就是用日志记录你的登录历史啊,每次用户登录的时候记下来,你不计当然没有 或者你不想的话在servletContext里面建一个map,放置每个用户的最新登录记录 |
|
返回顶楼 | |
发表时间:2009-12-25
说来说去不就是少了个记录的地方吗
数据库是干什么用的 |
|
返回顶楼 | |
发表时间:2009-12-25
kunee 写道 说来说去不就是少了个记录的地方吗
数据库是干什么用的 本来就是为了降低压力才做的控制,发到为了控制每次去db,本末倒置了 |
|
返回顶楼 | |