[Grails] Grails Web开发中,用户在线状态的问题

wenson 2008-06-13
目前有一需求,在处理WEB时,不能让同一个用户在不同的地方登录,思考了一些方法。目前网上查找到的资料有两种:
一是通过访问数据库,在数据库用户表比如Users表中添加一个字段 bit 当有人用这个用户登录的时候就把它变成1,但这方法会有以下问题:第一数据库更新问题,需要很大的性能而且如果大量用户这样做,后果不堪设想。第二:服务器无法判断设么时候用户推出登录;
二是通过JS来实现,但这种方法无法解决断网问题,还有就是如果一个用户在同一个计算机上登录两次那么第二次将不能登录,如果一个用户关闭浏览器服务器不知道,这个用户还想登录,后果就是登不上去了。

另外有一种个人觉得比较好的方案:
思想:就是用类似QQ的方法,如果一个用户再次登录,退出第一个登录的用户,保留第二个
存储:利用用户池java.util.Map作为用户池容器,里面放着用户标示和sessionId,这个容器放到application对象中介可以;
原理:当用户登录时直接put进去就可以了,如果这个对象存在就会被更新
其他:编写listener用HttpSessionAttributeListener地实现处理session属性的removed在removed的时候清楚这个用户在对象池中的状态
检查:编写一个用户Filter来检查请求的sessionId和用户池是否匹配就可以了如果不匹配清楚这个session中的用户对象迫使下线

但是这种方案在Grails中,我有以下疑问:
1、JAVA中的application对象在Groovy中有没有?我查了相关Groovy资料没发现,如果有的话应该如何操作此对象?
2、HttpSessionAttributeListener在Grails中有没有?有的话如何配置、操作?


或者有大侠知道此需求在Grails中有更好的解决方案的话,能否提供一下,大家一起讨论学习。。。。。。
魔力猫咪 2008-06-13
统一用户登录就可以了。比如CAS、OpenSSO等等。
Global site tag (gtag.js) - Google Analytics