srping mvc 同一账号不能同时登录,后者登录能够挤退前者,不知道怎么运用session来实现,大神们快来速速指教。最好有简单的登录案例,谢谢了。
解决方案 »
- java如何取n周前的日期?
- Timer & sleep()
- 一个字符串查找匹配问题?
- 没有分了,向大家请教请教问题,关于SWING做图形界面的时候解决方案
- 怎么样用java写放midi文件的音乐?谢谢各位
- 难道必须要初始化??
- applet的安全问题。。一样的内容,为什么有的不需要安全文件?
- 请谁代我看一下子这段小程序哪里有错误
- 100%给分
- 为什么我照抄书上的程序,在jdk1.3下编译还出错,各位高手帮帮我!!!
- X里巴巴移动面试题:尽你可能说出sleep 和wait 的区别和联系,多线程 join 方法 和 CountDownLatch 的区别
- 如何用JAVA生成一个简单的word文档!!!!
使用中间件容器校验的话,可以比较缓存的username和remoteUser的值
用这个不灵的,老是为空,毕竟sessionID是跟随浏览器而产生或者销毁。
有没有其他方式来进行处理呢??
根据username判断map是否有session
有就让session失效
没有当然就是将当前的username,session映射到map中去了.
session 销毁时
取出session中的username,清空map中对应的username,session
登陆时
根据username判断map是否有session
有就让session失效
将当前的username,session映射到map中去了.
session 销毁时
取出session中的username,清空map中对应的username,session
我把语言重新组织下:
系统启动时建立一个全局HashMap,随便用一个类建立一个静态成员变量即可。
每当登录成功时,用登陆者的username去HashMap中检查有无对应的session。
如果没有表示第一次登录,put进HashMap。
如果有就注销这个session(其实就是调用注销账户的代码),同时把后登录这个session put进HashMap。这个代码很难写么?很难么??
直接注销这个session,先前别处浏览器登录的会自动得到通知下线吗,不需要写个轮训或者websocket让它自动下线吗?
session用于无状态(也可理解成短连接吧)web通信(也就是说浏览器发完一个申请收到回复后就和服务器断开通信连接了,为了保证这个客户下次访问能获取上次的状态,所以才发明了session这个东西,一般的规范是在浏览器的cookie里植入一个sessionid,每次发送统一url时会将这个带到服务器,告诉服务器我又来了!)。
为什么设计成无连接通信,因为web面对成千上万的客户端,大部分时候他们是不会连续发申请的,所以没必要保持长连接。
而websocket用于长连接web通信,类似socket。一般来说长连接长时间占用服务器资源是一种浪费,所以只有在特定场合下使用。
而且现在不是所有浏览器都完全支持规范的websocket,现在还没有形成很广的应用。回到你的疑问【先前别处浏览器登录的会自动得到通知下线吗】,根本不需要,因为当它进行下次任何一次连接时(比如点击某个链接),服务器会侦测到 它的session已注销,会自动跳转到登录页面,这和你长时间不操作某个登录后的页面,系统会自动跳到登录页面时一个道理。
当然,你要说这样显得不友好,没经过他同意就注销掉他,难道就友好了?
自定义 RememberMeService 很容易实现。