我需要能够区分会话类别;就像这样:
public final class MyHttpSessionListener implements HttpSessionListener {
private static final AtomicInteger counterA =
new AtomicInteger();
private static final AtomicInteger counterB =
new AtomicInteger();
private static final MyHttpSessionListener INSTANCE =
new MyHttpSessionListener();
public static MyHttpSessionListener getInstance() {
return INSTANCE;
}
public MyHttpSessionListener() {}
public int getNumberOfAClients() {
return counterA.get();
}
public int getNumberOfBClients() {
return counterB.get();
}
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("Creating a session...");
User user =
(User) se.getSession()
.getAttribute(Config.CURRENT_USER_ATTRIBUTE);
switch (user.getUserType()) { <--- Here, user is null!
case A:
counterA.incrementAndGet();
break;
case B:
counterB.incrementAndGet();
break;
}
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// Similar to sessionCreated.
...
}
}
上述switch语句中的空问题是由于在我没有机会通过session.setAttribute(...)
将用户对象设置为会话之前,已调用了侦听器。
我需要能够区分会话类别;就像这样:public final类MyHttpSessionListener实现HttpSessionListener {private static final AtomicInteger ...
我发现的一种解决方案是向有问题的侦听器添加使计数器递增的方法。接下来,只需在登录代码中调用这些方法: