单用户登陆

  同时只允许一个账号登陆。
  
  关键问题是 判断用户离线的事情, 貌似用SESSION的LISTENER 可以监听到TIMEOUT这个事情
  但对于特殊的退出场景,可能无法获取到这个离线状态。

  想问下有没有通过别的方式实现的。

zhangbinghao,看看这个吧!

用户登陆时会产生一个唯一的随机码,如果此用户登陆后在别的地方登陆,那么就会修改这个随机码,这时原来登陆的用户在ServletContext中保存的随机码就改变了(与用户sesion中的随机码不同),那么其就被迫下线(这个工作由过滤器来做)

具体的请参考:
http://www.iteye.com/topic/190617

哦,另外,你也可以看看SSO(有些复杂)
http://www.blogjava.net/rosen/archive/2005/08/12/9876.html

sessionlistener应该可以.
用户登录的时候将用户session放入list中.如果用户同一帐登录,就去list中找 是否存在相同的session.如果存在说明有两个或多个帐号进行登录,此时可以用dwr或者其它技术向客户端发送提示:"您被迫离线".

总之有存放用户的session的list,至于怎么处理我想不难.