类似QQ,同一个账号,只能在一个地方登录。另一个地方在登录,原本的就注销了。那么该功能如何实现?
想必我们都是将用户存到session域当中,那有什么域范围比session大的呢?那自然是ServletContext,编写一个 ServletcontextListener,将用户与session对应存到Map中,那么自然可以根据user,决定session的存活。
那么不就可以利用 HttpSessionBindingListener对user进行监听(给user实现该接口),该接口下有两个方法
valueBound与valueUnbound分别实现每创建一个user对象,就将user与它对应的session绑定(解绑)到Map中
code:
UserServletContext决定用户是否可以在线
绑定用户与对应的session
在用户登录成功之后判断servletcontext是否存在该用户,以此来决定不同浏览器登录的同一用户是否下线
自动登录的实现(Cookie与过滤器)
思路:
- 判断用户是否存在
- 判断用户不存在,是否有存储自动登录的cookie
- 在有的基础上进行额外操作(根据密码账号登录,并存储该用户信息{session})----通过过滤器(类似代理)
- 最后无论第3步是否执行,都要chain.doFilter(req,resp);