linux_x86_64下weblogic10.3.3 session问题

Jmob07 2010-08-14 12:01:41
在linux下通过wls1033_generic.jar包安装了weblogic 10.3.3,一个简单的通过HttpSessionBindingListener实现踢人功能,以下是部分代码,


public class UserTracker
implements HttpSessionBindingListener, Serializable {
private static UserTracker instance = null;

// userID列表
public List trackerList = new ArrayList();

private UserTracker() {
super();
}

public static UserTracker getInstance() {
if (instance == null) {
instance = new UserTracker();
}
return instance;
}

/**
* 登录的时候记录
* @param event HttpSessionBindingEvent
*/
public void valueBound(HttpSessionBindingEvent event) {
UserTrackerInfo newTracker = new UserTrackerInfo();
newTracker.setUserCode((Integer)event.getSession().getAttribute("USERCODE"));
newTracker.setSessionID(event.getSession().getId());
//如果前面已经有登陆,则删除登陆的信息(踢人)
//removeUserIfExist(newTracker.getUserCode());
//增加自己
operateTracker(newTracker, "add");
}

/**
* 超时的时候退出
* @param event HttpSessionBindingEvent
*/
public void valueUnbound(HttpSessionBindingEvent event) {
UserTrackerInfo oldTracker;
String sessionID = event.getSession().getId();
Iterator it = trackerList.iterator();
while (it.hasNext()) {
oldTracker = (UserTrackerInfo) it.next();
if (oldTracker.getSessionID().equals(sessionID)) {
operateTracker(oldTracker, "remove");
return;
}
}
}

/**
*添加删除用户登录信息,operateType值"add","remove"
* @param event HttpSessionBindingEvent
*/
public void operateTracker(UserTrackerInfo tracker, String operaterType) {
if (operaterType.equals("add")) {
trackerList.add(tracker);
}
if (operaterType.equals("remove")) {
trackerList.remove(tracker);
}

}

/**
* 判断用户是否在登录页表中,如果不在,返回false
* @param sessionID String
* @return boolean
*/
public boolean existInLoginList(String sessionID) {
UserTrackerInfo oldTracker;

Iterator it = trackerList.iterator();
while (it.hasNext()) {
oldTracker = (UserTrackerInfo) it.next();
System.out.println("新sessionid=================== "+sessionID);
System.out.println("旧sessionid=================== "+oldTracker.getSessionID());
if (oldTracker.getSessionID().equals(sessionID)) {
return true;
}
}
return false;
}
}


sessionTimeout过滤器中判断session是否在存在缓寸列表中,
boolean isSessionValid = UserTracker.existInLoginList(req.getRequestedSessionId());  


在linux weblogic 10.3.3下,发现isSessionValid始终为false,通过打印sessionid发现缓存trackerList内存放的sessionid与req.getRequestedSessionId()并不相同(同一个session),即HttpSessionBindingEvent.getSession().getId())与req.getRequestedSessionId()不同,但在windows weblogic10.3.3下,又可以,百思不得其解。。。
...全文
145 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jmob07 2010-08-16
  • 打赏
  • 举报
回复
没人遇到这个问题吗

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧