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中删除)。
分析完毕,附实现源代码!
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 783 次
- 性别:

- 来自: 南昌

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
hibernate 使用复合主键的 ...
问题没解决,反倒放进了新手贴,寒心!
-- by beyondqinghua -
hibernate 使用复合主键的 ...
我的意思是大家怎么处理复合主键,因为对Hibernate在企业中的应用不熟悉,大 ...
-- by beyondqinghua -
hibernate 使用复合主键的 ...
tangdaibing 写道不知道楼主要问的问题是什么,没有搞清楚楼主的意思 ...
-- by wxb_love -
hibernate 使用复合主键的 ...
不知道楼主要问的问题是什么,没有搞清楚楼主的意思
-- by tangdaibing -
hibernate lazy的问题学习 ...
这段时间又碰到了问题,发现还是没有效果,对lazy和fetch的作用认识还不够. ...
-- by beyondqinghua






评论排行榜