我弟弟正在搞一个基于struts实现单用户登录的功能,他整理了一个他实现的思路,我还没来得及细看,先分享给大家,看看有没有什么问题和改进的地方呵呵。
以下是我弟弟整理的:
基于struts单用户登录
========================
实现效果:
当同一帐号在不同的地点,同时在线登录第二次时,那么此时第一次登录的用户做任何操作都会跳转至指定页面。。。
伪代码:
1. 监听器:(Listener)
监控对session值操作:(让类 实现 HttpSessionAttributeListener 接口)
1.1 当对session赋值时,进行判断:
if( 当前操作中的键 为“登录监听”){
则把该用户加入到在线用户列表中。
}
1.2 当对session的值做移除操作时,进行判断:
if( 当前操作中的键 为“登录监听”){
if(当前用户在在线列表中,并且,列表中的sessionId是否和当前的sessionID相等){
把 当前用户从全局 列表 中移除
}
}
2. 过滤器(Filter)
过滤所有操作:
2.1. 当做过滤操作时,
if( 该操作不为空 ,并且 ,该操作不为空字符串 并且, 该操作是否不为登录 ){
if( session 中 存在标识 “用户名”[因为用户名是不允许重复] ){
if( 在线列表中 存在当前用户 ){
if( 当前的sessionID 和 在线列表中 以当前用户为标识的 sessionID 相等 ){
通过过滤器
} else {
销毁session
直接跳转到指定页面
}
} else {
销毁session
直接跳转到指定页面
}
} else {
直接调转到指定页面
}
} else {
通过过滤器
}
3. 在线用户列表: (public static Map<String ,String>)
类中的属性
3. public static Map<String, String> onlineUser = new HashMap<String, String>();
类中的方法列表:
3.1. 得到在线用户Map
3.2. 添加在线用户
3.3. 得到在线用户的sessionId
3.4. 判断用户是否已经登录
3.5. 移除在线用户
4. 登录Action (LoginAction)
类中的方法列表:
4.1. 用户登录
4.2. 用户退出