动态WEB应用中的用户SESSION管理方案
来源:互联网 发布:java基本数据类型运算 编辑:程序博客网 时间:2024/05/17 21:47
要有这么一个监听器,当加入session时就可以触发一个加入session事件,在session过期时就可以触发一个删除事件,那么我们的把要处理的东西加入到这两个事件中就可以做很多于SESSION相关连的事。如在线用户的管理,单点登陆等等。
在J2EE中可以实现HttpSessionBindingListener接口,此接口有两要实现的方法。
void valueBound(HttpSessionBindingEvent event) 当实现此接口的监听类和session绑定时触发此事件。
void valueUnbound(HttpSessionBindingEvent event) 当session过期或实现此接口的监听类卸裁时触发此事件。
下面是一个示例解决方案:可以把登陆用户的信息记录在缓冲池中,当SESSION过期时,用户信息自动删除。
一个用户信息接口。一个用户缓冲池。一个HttpSessionBindingListener接口的监听类。
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();
}
}
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();
}
}
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("用户信息从缓存池中移除成功");
}
}
}
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)
- 动态WEB应用中的用户SESSION管理方案
- Hibernate中的Session管理方案
- WEB应用中的session
- Web 应用中的 Session 介绍
- Web应用中的Session祥解
- WEB应用中的SESSION详解
- Web应用状态管理(Session)
- session在实际管理中的应用
- 高扩展Web应用HTTP Session共享方案
- 高扩展Web应用HTTP Session共享方案
- WEB应用中的SESSION知多少?[ZZ]
- WEB应用中的SESSION知多少?
- WEB应用中的SESSION知多少?
- WEB应用中的SESSION知多少?
- WEB应用中的SESSION知多少
- WEB应用中的SESSION知多少
- Web应用中的session知多少
- WEB应用中的SESSION知多少?
- 2007-7-5 洗脑
- 一个国产的Linux LiveCD
- 最美又最遥远的回忆
- 鼠标从这里开始 Google以外的十大学术资源搜索引擎(转载自ccnuzxy的blog)
- GNU make 指南
- 动态WEB应用中的用户SESSION管理方案
- 系统还原点丢失原因解析
- Big-Three
- 2007高考作文北京卷(I)
- 因为后悔而死去
- tomcat的注释
- 关于不能识别4GB内存条的问题!
- 最快速度找到内存泄漏
- 取本机IP