Scott Zone
似水流年,勤勉无价
BlogJava
首页
新随笔
联系
聚合
管理
posts - 27, comments - 14, trackbacks - 0
动态WEB应用中的用户SESSION管理方案
要有这么一个监听器,当加入session时就可以触发一个加入session事件,在session过期时就可以触发一个删除事件,那么我们的把要处理的东西加入到这两个事件中就可以做很多于SESSION相关连的事。如在线用户的管理,单点登陆等等。
在J2EE中可以实现HttpSessionBindingListener接口,此接口有两要实现的方法。
void valueBound(HttpSessionBindingEvent event) 当实现此接口的监听类和session绑定时触发此事件。
void valueUnbound(HttpSessionBindingEvent event) 当session过期或实现此接口的监听类卸裁时触发此事件。
下面是一个示例解决方案:可以把登陆用户的信息记录在缓冲池中,当SESSION过期时,用户信息自动删除。
一个用户信息接口:
public
interface
LoginUserMessage
{}
一个用户缓冲池:
public
class
LoginUserPool
{
private
Map map
=
new
HashMap();
private
static
LoginUserPool loginUserPool
=
new
LoginUserPool();
private
LoginUserPool()
{}
public
static
LoginUserPool getInstance()
{
return
loginUserPool;
}
public
void
addLoginUserMessage(String sessionId,LoginUserMessage loginUserMessage)
{
map.remove(sessionId);
map.put(sessionId,loginUserMessage);
}
public
LoginUserMessage removeLoginUserMessage(String sessionId)
{
return
(LoginUserMessage) map.remove(sessionId);
}
public
LoginUserMessage getLoginUserMessage(String sessionId)
{
return
(LoginUserMessage) map.get(sessionId);
}
public
Map getLoginUserMessages()
{
return
map;
}
public
boolean
isEmpty()
{
return
map.isEmpty();
}
}
一个HttpSessionBindingListener接口的监听类:
public
class
UserLoginListener
implements
HttpSessionBindingListener
{
private
final
Log logger
=
LogFactory.getLog(getClass());
private
String sessionId
=
null
;
private
LoginUserMessage loginUserMessage
=
null
;
private
LoginUserPool loginUserPool
=
LoginUserPool.getInstance();
public
LoginUserMessage getLoginUserMessage()
{
return
loginUserMessage;
}
public
void
setLoginUserMessage(LoginUserMessage loginUserMessage)
{
this
.loginUserMessage
=
loginUserMessage;
}
public
String getSessionId()
{
return
sessionId;
}
public
void
setSessionId(String sessionId)
{
this
.sessionId
=
sessionId;
}
/** */
/**
//* (non-Javadoc)
*
@see
javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
*/
public
void
valueBound(HttpSessionBindingEvent event)
{
//
TODO Auto-generated method stub
if
(
this
.getLoginUserMessage()
!=
null
)
{
loginUserPool.addLoginUserMessage(
this
.getSessionId(),
this
.getLoginUserMessage());
logger.info(
"
用户信息加入缓存池成功
"
);
}
this
.setLoginUserMessage(
null
);
}
/** */
/**
//* (non-Javadoc)
*
@see
javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
*/
public
void
valueUnbound(HttpSessionBindingEvent event)
{
//
TODO Auto-generated method stub
if
(
!
loginUserPool.isEmpty())
{
loginUserPool.removeLoginUserMessage(sessionId);
logger.info(
"
用户信息从缓存池中移除成功
"
);
}
}
}
这样子的话,当在应用中把userLoginListener加入到session中时,就会自动把用户信息加入到缓冲池中了。
如:
session.setAttribute("userLoginListener",userLoginListener);
(原创,转载请保留文章出处
http://www.blogjava.net/bnlovebn/archive/2007/07/04/128006.html
)
posted on 2007-07-12 17:11
Scott.Pan
阅读(388)
评论(0)
编辑
收藏
所属分类:
代码收藏夹
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
insertAdjacentHTML方法示例
转JS校验
封装了Jakarta 文件上传功能的一个类(转)
几种js实现的动态多文件上传
动态WEB应用中的用户SESSION管理方案
JDBC之代码复用(转)
目录树程序
<
2007年7月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
Database
IM例举(1)
J2EE(2)
JBPM(1)
Liferay(7)
SSH(2)
Web开发
代码收藏夹(7)
生活记事(6)
目录服务(3)
随笔档案
2007年8月 (5)
2007年7月 (22)
搜索
最新评论
1. re: Portlet学习分析笔记[未登录]
来学习一下
--zz
2. re: 几种js实现的动态多文件上传
最后一种不能用
--11
3. re: insertAdjacentHTML方法示例[未登录]
1
--1
4. re: Portlet学习分析笔记
写的很不错。学习了
--chailieyang
5. re: insertAdjacentHTML方法示例
评论内容较长,点击标题查看
--啊打发
阅读排行榜
1. insertAdjacentHTML方法示例(23435)
2. 经典英语200句(4356)
3. Portlet学习分析笔记(3613)
4. SearchContainer的用法说明(2791)
5. 几种js实现的动态多文件上传(2761)
评论排行榜
1. Portlet学习分析笔记(4)
2. insertAdjacentHTML方法示例(2)
3. 几种js实现的动态多文件上传(1)
4. 经典英语200句(1)
5. Liferay项目中问题及解决方法列举(1)