浏览 2196 次
锁定老帖子 主题:简单的单用户登陆实现例子
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-07
前段时间搞了一个简单的单用户登陆实现例子,虽然不能实现敏捷反应,但是对安全相对要求底的系统还是可以考虑的。 具体原理:结合过滤器+Servlet监听器。
ServletContext对象保存的是整个WEB应用程序的共享信息,那么如果用户登陆可以把用户的部分信息保存在ServletContext中。
Servlet监听器可以监听用户过期或者注销,把用户信息从ServletContext中删除。
那么,现在关键是如何设计保存在ServletContext中的用户信息:这里,由于用户的ID是唯一的,那么我们可以利用Map集合保存在线用户列表(由于Map内部是使用类似索引查询进行快速查找,所以效率还是比较高的),Map的key是UID,Object是一个包含 uid、name、serial、time(记录时间)四个必要信息。这里关键是serial、time两个属性,用户登陆时会产生一个唯一的随机码,如果此用户登陆后在别的地方登陆,那么就会修改这个随机码,这时原来登陆的用户在ServletContext中保存的随机码就改变了(与用户sesion中的随机码不同),那么其就被迫下线(这个工作由过滤器来做);那么time的作用是什么呢,它是减少过滤器的判断时间间隔,减少用户每个请求都进行一次从ServletContext中获取serial与session中的serial进行比较的过程,减少资源的开销。
需要建立的数据对象类:User.java(用户session)、UList.java(ServletContext中的元数据);
需要建立的servlet:Login.java;
需要建立的filter:Check.java(判断用户的权限以及serial是否有效);
需要建立的listener servlet:UserListener.java(web服务器启动时初始化用户列表到ServletContext中,用户登陆时把用户信息添加到ServletContext中,用户过期或者注销把用户信息从ServletContext中删除)。
分析完毕,附实现源代码!
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |